



Parse Server는 Node.js를 실행할 수있는 모든 인프라에 배포 할 수있는 오픈 소스 백엔드입니다. Parse Server는 Express Web Application Framework에서 작동합니다. 기존 웹 응용 프로그램에 추가하거나 자체적으로 실행할 수 있습니다.
구문 분석 서버에 대한 전체 문서는 Wiki에서 제공됩니다. 구문 분석 서버 가이드는 시작하기에 좋은 장소입니다. API 참조 및 클라우드 코드 안내서도 제공됩니다. Parse Server 개발에 관심이 있으시면 개발 안내서를 사용하면 설정을 수행하는 데 도움이됩니다.
구문 분석 플랫폼의 개발을 지원하는 스폰서와 후원자들에게 큰 감사를드립니다 !
구문 분석 서버는 다른 분기의 다른 맛으로 제공됩니다.
release-<version>.xx , 예를 들어 release-5.xx . LTS 지점에는 사전 방출 지점이 없습니다. 이전 구문 분석 서버 메이저 버전에는 장기 지원 (LTS)이 제공됩니다. 예를 들어, Parse Server 5.x는 Parse Server 6.x가 Parse Server 7.x에 의해 대체 될 때까지 보안 업데이트를 받고 새로운 LTS 버전이됩니다. 현재 주요 버전은 Branch release 에 게시되지만 LTS 버전은 Parse Server 5.x LTS Branch의 경우 Branch release-5.xx release-#.xx 에 게시됩니다.
시작하는 가장 빠르고 쉬운 방법은 MongoDB 및 구문 분석 서버를 로컬에서 실행하는 것입니다.
시작하기 전에 설치했는지 확인하십시오.
npm 포함하는 nodejsParse Server는 가장 최근의 Node.js 릴리스로 지속적으로 테스트되어 호환성을 보장합니다. 우리는 Node.js 장기 지원 계획을 따르고 공식적으로 지원되고 수명이 끝나지 않은 버전에 대해서만 테스트합니다.
| 버전 | 최신 버전 | 수명이 끝났습니다 | 호환 가능 |
|---|---|---|---|
| node.js 18 | 18.20.4 | 2025 년 4 월 | ✅ 예 |
| node.js 20 | 20.15.1 | 2026 년 4 월 | ✅ 예 |
| node.js 22 | 22.4.1 | 2027 년 4 월 | ✅ 예 |
구문 분석 서버는 호환성을 보장하기 위해 가장 최근의 MongoDB 릴리스로 지속적으로 테스트됩니다. 우리는 MongoDB 지원 일정 및 MongoDB 라이프 사이클 일정을 따르며 공식적으로 지원되고 수명이 끝나지 않은 버전에 대해서만 테스트합니다. MongoDB "빠른 릴리스"는 다음 주요 버전의 사전 방출로 간주되므로 무시됩니다.
| 버전 | 최신 버전 | 수명이 끝났습니다 | 호환 가능 |
|---|---|---|---|
| Mongodb 4.2 | 4.2.25 | 2023 년 4 월 | ✅ 예 |
| Mongodb 4.4 | 4.4.29 | 2024 년 2 월 | ✅ 예 |
| Mongodb 5 | 5.0.26 | 2024 년 10 월 | ✅ 예 |
| Mongodb 6 | 6.0.14 | 2025 년 7 월 | ✅ 예 |
| Mongodb 7 | 7.0.8 | TDB | ✅ 예 |
| Mongodb 8 | 8.0.0 | TDB | ✅ 예 |
Parse Server는 Postgis Docker 이미지를 사용하여 호환성을 보장하기 위해 PostgreSQL 및 PostGIS의 최신 릴리스로 지속적으로 테스트됩니다. 우리는 PostgreSQL 지원 일정 및 PostGIS 지원 일정을 따르며 공식적으로 지원되고 수명이 끝나지 않은 버전에 대해서만 테스트합니다. 5 년의 광범위한 PostgreSQL 지원 기간으로 인해 Parse Server는 공식 수명 종료 날짜 약 2 년 전에 지원을 중단합니다.
| 버전 | Postgis 버전 | 수명이 끝났습니다 | 구문 분석 서버 지원 | 호환 가능 |
|---|---|---|---|---|
| Postgres 13 | 3.1, 3.2, 3.3, 3.4, 3.5 | 2025 년 11 월 | <= 6.x (2023) | ✅ 예 |
| Postgres 14 | 3.5 | 2026 년 11 월 | <= 7.x (2024) | ✅ 예 |
| Postgres 15 | 3.5 | 2027 년 11 월 | <= 8.x (2025) | ✅ 예 |
| Postgres 16 | 3.5 | 2028 년 11 월 | <= 9.x (2026) | ✅ 예 |
| Postgres 17 | 3.5 | 2029 년 11 월 | <= 9.x (2026) | ✅ 예 |
$ npm install -g parse-server mongodb-runner
$ mongodb-runner start
$ parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://localhost/test 참고 : 권한 문제 ( npm ERR! code 'EACCES' )로 인해 -g 가있는 설치가 실패하면 이 링크를 참조하십시오.
$ git clone https://github.com/parse-community/parse-server
$ cd parse-server
$ docker build --tag parse-server .
$ docker run --name my-mongo -d mongo$ docker run --name my-parse-server -v config-vol:/parse-server/config -p 1337:1337 --link my-mongo:mongo -d parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://mongo/test 참고 : 클라우드 코드를 사용하려면 -v cloud-code-vol:/parse-server/cloud --cloud /parse-server/cloud/main.js 위의 명령에 추가하십시오. Parse Server를 시작하기 전에 main.js 가 cloud-code-vol 디렉토리에 있는지 확인하십시오.
Application ID 및 마스터 키로 임의의 문자열을 사용할 수 있습니다. 이들은 고객이 구문 분석 서버와 함께 인증하는 데 사용됩니다.
그게 다야! 이제 컴퓨터에서 독립형 버전의 Parse Server를 실행하고 있습니다.
원격 몽고 브를 사용하십니까? parse-server 시작할 때 --databaseURI DATABASE_URI 매개 변수를 통과하십시오. 구문 분석 서버 구성에 대해 자세히 알아보십시오. 사용 가능한 전체 옵션 목록을 보려면 parse-server --help 실행하십시오.
Parse Server를 실행 중이므로 이제 첫 번째 객체를 저장해야합니다. 우리는 나머지 API를 사용하지만, 구문 분석 SDK를 사용하여 쉽게 동일한 작업을 수행 할 수 있습니다. 다음을 실행하십시오.
$ curl -X POST
-H " X-Parse-Application-Id: APPLICATION_ID "
-H " Content-Type: application/json "
-d ' {"score":1337,"playerName":"Sean Plott","cheatMode":false} '
http://localhost:1337/parse/classes/GameScore이와 유사한 응답을 얻어야합니다.
{
"objectId" : "2ntvSpRGIK" ,
"createdAt" : "2016-03-11T23:51:48.050Z"
} 이제이 객체를 직접 검색 할 수 있습니다 ( 2ntvSpRGIK 객체가 생성 될 때받은 실제 objectId 로 교체하십시오) :
$ curl -X GET
-H " X-Parse-Application-Id: APPLICATION_ID "
http://localhost:1337/parse/classes/GameScore/2ntvSpRGIK // Response
{
"objectId" : " 2ntvSpRGIK " ,
"score" : 1337 ,
"playerName" : " Sean Plott " ,
"cheatMode" : false ,
"updatedAt" : " 2016-03-11T23:51:48.050Z " ,
"createdAt" : " 2016-03-11T23:51:48.050Z "
}그러나 개별 객체 ID를 추적하는 것은 이상적이지 않습니다. 대부분의 경우 컬렉션을 통해 쿼리를 실행하려고합니다.
$ curl -X GET
-H " X-Parse-Application-Id: APPLICATION_ID "
http://localhost:1337/parse/classes/GameScore // The response will provide all the matching objects within the `results` array:
{
"results" : [
{
"objectId" : " 2ntvSpRGIK " ,
"score" : 1337 ,
"playerName" : " Sean Plott " ,
"cheatMode" : false ,
"updatedAt" : " 2016-03-11T23:51:48.050Z " ,
"createdAt" : " 2016-03-11T23:51:48.050Z "
}
]
}구문 분석 서버에서 객체 저장 및 쿼리 사용에 대한 자세한 내용은 구문 분석 문서를 확인하십시오.
Parse는 모든 주요 플랫폼에 대한 SDK를 제공합니다. 앱을 구문 분석 서버에 연결하는 방법을 배우려면 구문 분석 서버 안내서를 참조하십시오.
프로젝트의 작동 방식을 더 잘 이해 한 후에는 Parse Server Wiki를 참조하여 Parse Server를 주요 인프라 제공 업체에 배포 할 수있는 심층 가이드를 참조하십시오. Parse 서버를 실행하는 추가 방법에 대해 자세히 알아 보려면 계속 읽으십시오.
우리는 Express의 구문 분석 서버 모듈을 사용하고 다양한 인프라 제공 업체에 쉽게 배포 할 수있는 기본 Node.js 응용 프로그램을 제공했습니다.
구문 분석 서버의 인스턴스를 작성하여 새 또는 기존 Express 웹 사이트에 마운트 할 수도 있습니다.
const express = require ( 'express' ) ;
const ParseServer = require ( 'parse-server' ) . ParseServer ;
const app = express ( ) ;
const server = new ParseServer ( {
databaseURI : 'mongodb://localhost:27017/dev' , // Connection string for your MongoDB database
cloud : './cloud/main.js' , // Path to your Cloud Code
appId : 'myAppId' ,
masterKey : 'myMasterKey' , // Keep this key secret!
fileKey : 'optionalFileKey' ,
serverURL : 'http://localhost:1337/parse' // Don't forget to change to https if needed
} ) ;
// Start server
await server . start ( ) ;
// Serve the Parse API on the /parse URL prefix
app . use ( '/parse' , server . app ) ;
app . listen ( 1337 , function ( ) {
console . log ( 'parse-server-example running on port 1337.' ) ;
} ) ; 사용 가능한 옵션의 전체 목록을 보려면 parse-server --help 실행하거나 [Parse Server Configurations] [Server-Options]를 살펴보십시오.
/parse/health 종점에 요청을 보내서 구문 분석 서버 건강을 확인하십시오.
응답은 다음과 같습니다.
{
"status" : " ok "
}| 값 | 설명 |
|---|---|
initialized | 서버가 생성되었지만 start 방법은 아직 호출되지 않았습니다. |
starting | 서버가 시작 중입니다. |
ok | 서버가 시작되어 실행 중입니다. |
error | 시작 오류가 있었는데 자세한 내용은 로그를 참조하십시오. |
구문 분석 서버는 다음 옵션을 사용하여 구성 할 수 있습니다. 독립형 parse-server 실행할 때 또는 parse-server path/to/configuration.json 사용하여 JSON 형식의 구성 파일을로드 하여이 매개 변수를 전달할 수 있습니다. Express에서 Parse Server를 사용하는 경우 옵션으로 ParseServer 객체로 전달할 수도 있습니다.
사용 가능한 옵션의 전체 목록은 parse-server --help 실행하거나 [Parse Server Configurations] [Server-Options]를 살펴보십시오.
appId (필수) -이 서버 인스턴스와 함께 호스팅 할 응용 프로그램 ID. 임의의 문자열을 사용할 수 있습니다. 마이그레이션 앱의 경우 호스팅 된 구문 분석 앱과 일치해야합니다.masterKey (필수) - ACL 보안을 재정의하는 데 사용할 마스터 키. 임의의 문자열을 사용할 수 있습니다. 그것을 비밀로 유지하십시오! 마이그레이션 앱의 경우 호스팅 된 구문 분석 앱과 일치해야합니다.databaseURI (필수) - 데이터베이스의 연결 문자열 (예 : mongodb://user:[email protected]/dbname ). 암호에 특수 문자가있는 경우 URL 비밀번호를 인코딩하십시오.port - 기본 포트는 1337 이며이 매개 변수를 지정하여 다른 포트를 사용합니다.serverURL URL (http : // 또는 https : //을 지정하는 것을 잊지 마십시오). 이 URL은 클라우드 코드에서 서버를 구문 분석 할 때 사용됩니다.cloud - 클라우드 코드의 절대 경로 main.js 파일.push - 구성 옵션. 푸시 알림 빠른 시작을 참조하십시오. 구문 분석에 사용되는 클라이언트 키는 더 이상 구문 분석 서버를 사용하여 필요하지 않습니다. 여전히 구식 클라이언트에 대한 액세스를 거부 할 수 있도록 여전히 요구하려면 초기화 시간에 키를 설정할 수 있습니다. 이 키를 설정하려면 모든 요청이 구성된 키 중 하나를 제공해야합니다.
clientKeyjavascriptKeyrestAPIKeydotNetKey| 범위 | 내부 데이터 | 읽기 전용 데이터 (1) | 사용자 정의 데이터 | CLP, ACL에 의해 제한됩니다 | 열쇠 |
|---|---|---|---|---|---|
| 내부 | r/w | r/w | r/w | 아니요 | maintenanceKey |
| 주인 | -/- | 아르 자형/- | r/w | 아니요 | masterKey |
| Readonlymaster | -/- | 아르 자형/- | 아르 자형/- | 아니요 | readOnlyMasterKey |
| 세션 | -/- | 아르 자형/- | r/w | 예 | sessionToken |
(1) Parse.Object.createdAt , Parse.Object.updatedAt
사용자 이메일 주소 확인 및 이메일을 통해 비밀번호 재설정 활성화에는 이메일 어댑터가 필요합니다. 커뮤니티가 제공하고 유지 관리하는 많은 이메일 어댑터가 있습니다. 다음은 예제 이메일 어댑터가있는 예제 구성입니다. 자세한 내용은 [Parse Server Options] [Server-Options]를 참조하여 사용 가능한 전체 옵션 목록을 참조하십시오.
const server = ParseServer ( {
... otherOptions ,
// Enable email verification
verifyUserEmails : true ,
// Set email verification token validity to 2 hours
emailVerifyTokenValidityDuration : 2 * 60 * 60 ,
// Set email adapter
emailAdapter : {
module : 'example-mail-adapter' ,
options : {
// Additional adapter options
... mailAdapterOptions
}
} ,
} ) ;구문 분석 플랫폼에서 유지 관리하는 오프 전자 메일 어댑터 :
커뮤니티가 기여한 이메일 어댑터 :
보안 요구 사항을 충족하는 비밀번호 및 계정 정책을 설정하십시오. 다음은 예제 구성입니다. 자세한 내용은 [Parse Server Options] [Server-Options]를 참조하여 사용 가능한 전체 옵션 목록을 참조하십시오.
const server = ParseServer ( {
... otherOptions ,
// The account lock policy
accountLockout : {
// Lock the account for 5 minutes.
duration : 5 ,
// Lock an account after 3 failed log-in attempts
threshold : 3 ,
// Unlock the account after a successful password reset
unlockOnPasswordReset : true ,
} ,
// The password policy
passwordPolicy : {
// Enforce a password of at least 8 characters which contain at least 1 lower case, 1 upper case and 1 digit
validatorPattern : / ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,}) / ,
// Do not allow the username as part of the password
doNotAllowUsername : true ,
// Do not allow to re-use the last 5 passwords when setting a new password
maxPasswordHistory : 5 ,
} ,
} ) ; 주의, 이것은 생산에 적합하지 않을 수있는 실험적인 기능입니다.
사용자 정의 경로를 사용하면 기존 비밀번호 재설정 및 이메일 확인 기능과 유사한 웹 페이지를 사용하여 사용자 흐름을 구축 할 수 있습니다. 사용자 정의 경로는 구문 분석 서버 구성의 pages 옵션으로 정의됩니다.
const api = new ParseServer ( {
... otherOptions ,
pages : {
enableRouter : true , // Enables the experimental feature; required for custom routes
customRoutes : [ {
method : 'GET' ,
path : 'custom_route' ,
handler : async request => {
// custom logic
// ...
// then, depending on the outcome, return a HTML file as response
return { file : 'custom_page.html' } ;
}
} ]
}
} 위의 경로는 https://[parseServerPublicUrl]/[parseMount]/[pagesEndpoint]/[appId]/[customRoute] 로 GET 요청을 보내면 호출 할 수 있습니다.
handler request 수신하고 pages.pagesPath 디렉토리에서 응답으로 custom_page.html 웹 페이지를 반환합니다. 이 방법으로 사용자 정의 경로를 구축 할 때의 장점은 Page Localization 및 동적 자리 표시 자와 같은 구문 분석 서버의 내장 기능을 자동으로 사용한다는 것입니다.
다음 경로는 Parse Server의 내장 기능에서 이미 사용하므로 사용자 정의 경로에는 사용할 수 없습니다. path 와 method 의 동일한 조합을 갖는 맞춤형 경로는 무시됩니다.
| 길 | HTTP 방법 | 특징 |
|---|---|---|
verify_email | GET | 이메일 확인 |
resend_verification_email | POST | 이메일 확인 |
choose_password | GET | 비밀번호 재설정 |
request_password_reset | GET | 비밀번호 재설정 |
request_password_reset | POST | 비밀번호 재설정 |
| 매개 변수 | 선택 과목 | 유형 | 기본값 | 예제 값 | 환경 변수 | 설명 |
|---|---|---|---|---|---|---|
pages | 예 | Object | undefined | - | PARSE_SERVER_PAGES | 비밀번호 재설정 및 이메일 확인과 같은 페이지 옵션. |
pages.enableRouter | 예 | Boolean | false | - | PARSE_SERVER_PAGES_ENABLE_ROUTER | 페이지 라우터를 활성화 해야하는 경우 true 입니다. 페이지 옵션이 적용 되려면 필요합니다. 주의, 이것은 생산에 적합하지 않을 수있는 실험적인 기능입니다. |
pages.customRoutes | 예 | Array | [] | - | PARSE_SERVER_PAGES_CUSTOM_ROUTES | 맞춤 경로. 경로는 여기에서 정의 된 순서대로 추가되며, 요청이 순서대로 트래버스 경로를 사용하기 때문에 고려해야합니다. 비밀번호 재설정 및 이메일 확인과 같은 빌드 인 경로 후에 사용자 정의 경로가 통과됩니다. |
pages.customRoutes.method | String | - | GET , POST | - | 사용자 정의 경로의 HTTP 방법. | |
pages.customRoutes.path | String | - | custom_page | - | 맞춤 경로의 경로. method 다른 경우 동일한 경로를 사용할 수 있습니다. 예를 들어 custom_page HTTP 요청 방법에 따라 호출되는 두 개의 경로, GET 및 POST 경로를 가질 수 있습니다. | |
pages.customRoutes.handler | AsyncFunction | - | async () => { ... } | - | 경로가 HTTP 요청과 일치 할 때 호출되는 경로 처리기. 핸들러가 페이지를 반환하지 않으면 요청은 404를 Not found. 응답. |
앱의 기본 페이지를 변경하고 사용자를 다른 경로 또는 도메인으로 리디렉션 할 수 있습니다.
const server = ParseServer ( {
... otherOptions ,
customPages : {
passwordResetSuccess : "http://yourapp.com/passwordResetSuccess" ,
verifyEmailSuccess : "http://yourapp.com/verifyEmailSuccess" ,
parseFrameURL : "http://yourapp.com/parseFrameURL" ,
linkSendSuccess : "http://yourapp.com/linkSendSuccess" ,
linkSendFail : "http://yourapp.com/linkSendFail" ,
invalidLink : "http://yourapp.com/invalidLink" ,
invalidVerificationLink : "http://yourapp.com/invalidVerificationLink" ,
choosePassword : "http://yourapp.com/choosePassword"
}
} ) 환경 변수를 사용하여 구문 분석 서버를 구성 할 수 있습니다.
PORT
PARSE_SERVER_APPLICATION_ID
PARSE_SERVER_MASTER_KEY
PARSE_SERVER_DATABASE_URI
PARSE_SERVER_URL
PARSE_SERVER_CLOUD기본 포트는 1337이며 다른 포트 세트를 사용하여 포트 환경 변수를 사용합니다.
$ PORT=8080 parse-server --appId APPLICATION_ID --masterKey MASTER_KEY 구성 가능한 환경 변수의 전체 목록은 parse-server --help 실행하거나 구문 분석 서버 구성을 살펴보십시오.
모든 공식 어댑터는 NPM (@parse)의 스코프 패키지로 배포됩니다.
일부 잘 관리 된 어댑터는 구문 분석 서버 모듈 조직에서도 사용할 수 있습니다.
NPM을 검색하여 커뮤니티가 유지 관리하는 더 많은 어댑터를 찾을 수도 있습니다.
Parse Server는 개발자가 파일을 호스팅 할 때 여러 옵션 중에서 선택할 수 있습니다.
GridFSBucketAdapter MongoDB에 의해 뒷받침됩니다S3Adapter Amazon S3에 의해 지원됩니다GCSAdapter Google Cloud Storage가 뒷받침합니다FSAdapter 로컬 파일 스토리지 GridFSBucketAdapter 기본적으로 사용되며 설정이 필요하지 않지만 Amazon S3, Google Cloud Storage 또는 로컬 파일 스토리지를 사용하는 데 관심이있는 경우 Parse 서버 안내서에서 추가 구성 정보를 사용할 수 있습니다.
주의, 이것은 생산에 적합하지 않을 수있는 실험적인 기능입니다.
이 기능은 일반적으로 모바일 운영 체제의 네트워크 문제 또는 네트워크 어댑터 액세스 제한으로 인해 Parse Server에서 여러 번 수신 한 동일한 요청을 중복 제거합니다.
동일한 요청은 요청 헤더 X-Parse-Request-Id 로 식별됩니다. 따라서 클라이언트 요청에는이 헤더가 포함되어야합니다. 이 헤더가 포함되지 않은 요청은 중복 제거 될 수 없으며 구문 분석 서버에서 정상적으로 처리됩니다. 이는이 기능을 활성화 할 때 구문 분석 서버 가이 헤더없이 요청을 여전히 처리 하므로이 기능을 클라이언트에 롤아웃하는 것이 원활 함을 의미합니다.
이 기능은 클라이언트 측에서 헤더를 보내고 서버에서 헤더를 처리 할 수 있도록 활성화해야합니다. 기능이 아직 지원되는지 여부를 보려면 특정 구문 분석 SDK 문서를 참조하십시오.
중복 제거는 객체 생성 및 업데이트 ( POST PUT 요청)에 대해서만 수행됩니다. 이러한 작업은 이미 정의에 따라 Idemotent이므로 객체 찾기 및 삭제 ( GET 및 DELETE )에 대해 중복 제거가 수행되지 않습니다.
let api = new ParseServer({
idempotencyOptions: {
paths: [".*"], // enforce for all requests
ttl: 120 // keep request IDs for 120s
}
}
| 매개 변수 | 선택 과목 | 유형 | 기본값 | 예제 값 | 환경 변수 | 설명 |
|---|---|---|---|---|---|---|
idempotencyOptions | 예 | Object | undefined | parse_server_experimental_idempotency_options | 이를 설정하면 지정된 경로에 대한 Idempotency 시행이 가능합니다. | |
idempotencyOptions.paths | 예 | Array<String> | [] | .* (모든 경로, 아래 예제 포함),functions/.* (모든 기능),jobs/.* (모든 일자리),classes/.* (모든 수업),functions/.* (모든 기능),users (사용자 생성 / 업데이트),installations (설치 / 업데이트) | parse_server_experimental_idempotency_paths | 요청 중복 제거에 대한 요청 경로와 일치 해야하는 경로 패턴 배열. 예를 들어 요청 경로 /parse/functions/myFunction 과 일치하도록 마운트 경로는 포함되지 않아야합니다. 경로 패턴 functions/myFunction 지정하십시오. 요청 경로의 후행 슬래시는 무시됩니다. 예를 들어 경로 패턴 functions/myFunction /parse/functions/myFunction 및 /parse/functions/myFunction/ 과 일치합니다. |
idempotencyOptions.ttl | 예 | Integer | 300 | 60 (60 초) | parse_server_experimental_idempotency_ttl | 요청 레코드가 데이터베이스에서 폐기 된 다음 초의 지속 시간. 네트워크 문제로 인한 중복 요청은 최대 몇 초 이내에 도착할 수 있습니다. 이 값은 0 보다 커야합니다. |
Postgres 에서이 기능을 사용하려면 PGADMIN 또는 유사한 Postgres function idempotency_delete_expired_records() 호출하여 만료 된 idempoTency 레코드를 삭제하는 CRON 작업을 작성해야합니다. 아래의 예제 스크립트를 찾을 수 있습니다. 스크립트에 PARSE 서버와 Postgres에 로그인 할 수있는 권한이 동일한 권한이 있는지 확인하십시오.
#! /bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username " $POSTGRES_USER " --dbname " $POSTGRES_DB " << - EOSQL
SELECT idempotency_delete_expired_records();
EOSQL
exec " $@ " 위의 스크립트가 명명되었다고 가정하면, parse_idempotency_delete_expired_records.sh , 2 분마다 스크립트를 실행하는 Cron 작업은 다음과 같습니다.
2 * * * * /root/parse_idempotency_delete_expired_records.sh > /dev/null 2>&1 주의, 이것은 생산에 적합하지 않을 수있는 실험적인 기능입니다.
사용자 정의 페이지 및 기능 페이지 (예 : 비밀번호 재설정, 이메일 확인)는 Parse Server 구성의 pages 옵션으로 로컬로 현지화 할 수 있습니다.
const api = new ParseServer ( {
... otherOptions ,
pages : {
enableRouter : true , // Enables the experimental feature; required for localization
enableLocalization : true ,
}
} 지역화 된 페이지 컨텐츠와 요청이 공급 된 locale 매개 변수를 일치시켜 현지화가 달성됩니다. 로케일은 요청 쿼리, 본문 또는 헤더에 다음 키를 제공 할 수 있습니다.
localelocalex-parse-page-param-locale예를 들어, 쿼리의 로케일 매개 변수와 비밀번호 재설정 링크가 다음과 같습니다.
http://example.com/parse/apps/[appId]/request_password_reset?token=[token]&username=[username]&locale=de-AT
pages.pagesPath 와 함께 설정할 수 있습니다.pages.customUrls 페이지를 가리키하더라도 페이지를 설정하는 경우 비활성화됩니다..html 파일 만 현지화를 위해 고려됩니다.페이지는 두 가지 방식으로 로컬 로컬로 지정할 수 있습니다.
페이지는 파일이 로케일 또는 언어의 이름을 따서 명명 된 하위 디렉토리에 배치되는 디렉토리 구조의 해당 파일을 사용하여 현지화됩니다. 기본 디렉토리의 파일은 기본 파일입니다.
디렉토리 구조 예 :
root /
├── public / // pages base path
│ ├── example . html // default file
│ └── de / // de language folder
│ │ └── example . html // de localized file
│ └── de - AT / // de-AT locale folder
│ │ └── example . html // de-AT localized file파일은 다음 순서로 로케일과 일치합니다.
de-AT 폴더 de-AT 에서 파일을 일치시킵니다.de-CH 폴더 de 에서 파일을 일치시킵니다.구성 예 :
const api = new ParseServer ( {
... otherOptions ,
pages : {
enableRouter : true , // Enables the experimental feature; required for localization
enableLocalization : true ,
customUrls : {
passwordReset : 'https://example.com/page.html'
}
}
}장점 :
단점 :
페이지는 HTML 파일에 자리 표시자를 추가하고 자리 표시 자로 채우는 변환이 포함 된 JSON 리소스를 제공하여 현지화됩니다.
디렉토리 구조 예 :
root /
├── public / // pages base path
│ ├── example . html // the page containing placeholders
├── private / // folder outside of public scope
│ └── translations . json // JSON resource fileJSON 리소스 파일은 번역 플랫폼에서 종종 지원되는 구문 인 i18next 구문을 느슨하게 따릅니다. 변환을 관리 할 수 있고, 구문 분석 서버에서 사용하기 위해 쉽게 내보내고,이 워크 플로우를 자동화 할 수 있습니다.
예제 JSON 컨텐츠 :
{
"en" : { // resource for language `en` (English)
"translation" : {
"greeting" : " Hello! "
}
},
"de" : { // resource for language `de` (German)
"translation" : {
"greeting" : " Hallo! "
}
}
"de-AT" : { // resource for locale `de-AT` (Austrian German)
"translation" : {
"greeting" : " Servus! "
}
}
}구성 예 :
const api = new ParseServer ( {
... otherOptions ,
pages : {
enableRouter : true , // Enables the experimental feature; required for localization
enableLocalization : true ,
localizationJsonPath : './private/localization.json' ,
localizationFallbackLocale : 'en'
}
}장점 :
단점 :
appId 와 같은 관련 기본 매개 변수 및 JSON 리소스를 통해 제공된 변환과 더불어 라우터 구성의 일부로 사용자 정의 동적 자리 표시기를 정의 할 수 있습니다. 이것은 국소화와 독립적으로 작동하며, 또한 enableLocalization 비활성화 된 경우에도 작동합니다.
구성 예 :
const api = new ParseServer ( {
... otherOptions ,
pages : {
enableRouter : true , // Enables the experimental feature; required for localization
placeholders : {
exampleKey : 'exampleValue'
}
}
} 자리 표시자는 동적 자리 표시 자 값을 허용하기 위해 locale 및 기타 기능 관련 매개 변수를 통과하여 기능 또는 비동기 기능으로 제공 될 수 있습니다.
const api = new ParseServer ( {
... otherOptions ,
pages : {
enableRouter : true , // Enables the experimental feature; required for localization
placeholders : async ( params ) => {
const value = await doSomething ( params . locale ) ;
return {
exampleKey : value
} ;
}
}
} 다음 매개 변수 및 자리 표시 자 키는 비밀번호 재설정 또는 이메일 확인과 같은 기능과 관련하여 사용되므로 예약되어 있습니다. JSON 리소스의 번역 키 또는 구성의 수동으로 정의 된 자리 표시 자 키 ( appId , appName , email , error , locale , publicServerUrl , token , username )로 사용해서는 안됩니다.
| 매개 변수 | 선택 과목 | 유형 | 기본값 | 예제 값 | 환경 변수 | 설명 |
|---|---|---|---|---|---|---|
pages | 예 | Object | undefined | - | PARSE_SERVER_PAGES | 비밀번호 재설정 및 이메일 확인과 같은 페이지 옵션. |
pages.enableRouter | 예 | Boolean | false | - | PARSE_SERVER_PAGES_ENABLE_ROUTER | 페이지 라우터를 활성화 해야하는 경우 true 입니다. 페이지 옵션이 적용 되려면 필요합니다. 주의, 이것은 생산에 적합하지 않을 수있는 실험적인 기능입니다. |
pages.enableLocalization | 예 | Boolean | false | - | PARSE_SERVER_PAGES_ENABLE_LOCALIZATION | 페이지를 현지화 해야하는 경우 사실입니다. 이것은 사용자 정의 페이지 리디렉션에 영향을 미치지 않습니다. |
pages.localizationJsonPath | 예 | String | undefined | ./private/translations.json | PARSE_SERVER_PAGES_LOCALIZATION_JSON_PATH | 현지화를위한 JSON 파일로가는 경로; 번역은 로케일에 따라 템플릿 자리 표시자를 채우는 데 사용됩니다. |
pages.localizationFallbackLocale | 예 | String | en | en , en-GB , default | PARSE_SERVER_PAGES_LOCALIZATION_FALLBACK_LOCALE | 주어진 로케일에 대해 일치하는 번역이 제공되지 않으면 현지화를위한 폴백 로케일. JSON 파일을 통해 번역 리소스를 제공 할 때만 관련이 있습니다. |
pages.placeholders | 예 | Object , Function , AsyncFunction | undefined | { exampleKey: 'exampleValue' } | PARSE_SERVER_PAGES_PLACEHOLDERS | 페이지에 채워질 자리 표시 자 키 및 값; 이것은 간단한 객체 또는 콜백 함수 일 수 있습니다. |
pages.forceRedirect | 예 | Boolean | false | - | PARSE_SERVER_PAGES_FORCE_REDIRECT | 응답이 항상 리디렉션되고 콘텐츠가 아닌 경우, 응답 유형이 요청 유형에 의존 해야하는 경우 ( GET -> 컨텐츠 응답 false POST 요청 - true 응답). |
pages.pagesPath | 예 | String | ./public | ./files/pages , ../../pages | PARSE_SERVER_PAGES_PAGES_PATH | 페이지 디렉토리의 경로; 또한 정적 엔드 포인트 /apps 가리키는 위치를 정의합니다. |
pages.pagesEndpoint | 예 | String | apps | - | PARSE_SERVER_PAGES_PAGES_ENDPOINT | 페이지의 API 엔드 포인트. |
pages.customUrls | 예 | Object | {} | { passwordReset: 'https://example.com/page.html' } | PARSE_SERVER_PAGES_CUSTOM_URLS | URL은 사용자 정의 페이지에 있습니다 |
pages.customUrls.passwordReset | 예 | String | password_reset.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_PASSWORD_RESET | 비밀번호 재설정을 위해 사용자 정의 페이지의 URL. |
pages.customUrls.passwordResetSuccess | 예 | String | password_reset_success.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_PASSWORD_RESET_SUCCESS | 비밀번호 재설정 -> 성공을 위해 사용자 정의 페이지의 URL. |
pages.customUrls.passwordResetLinkInvalid | 예 | String | password_reset_link_invalid.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_PASSWORD_RESET_LINK_INVALID | 비밀번호 재설정에 대한 사용자 정의 페이지의 URL-> 링크가 잘못되었습니다. |
pages.customUrls.emailVerificationSuccess | 예 | String | email_verification_success.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_SUCCESS | 이메일 확인 -> 성공을 위해 사용자 정의 페이지의 URL. |
pages.customUrls.emailVerificationSendFail | 예 | String | email_verification_send_fail.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_SEND_FAIL | 이메일 확인 -> 링크 보내기 실패에 대한 사용자 정의 페이지의 URL. |
pages.customUrls.emailVerificationSendSuccess | 예 | String | email_verification_send_success.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_SEND_SUCCESS | 이메일 확인 -> 링크 -> 성공을 위해 사용자 정의 페이지의 URL. |
pages.customUrls.emailVerificationLinkInvalid | 예 | String | email_verification_link_invalid.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_LINK_INVALID | 이메일 확인 -> 링크가 잘못된 사용자 정의 페이지의 URL. |
pages.customUrls.emailVerificationLinkExpired | 예 | String | email_verification_link_expired.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_LINK_EXPIRED | 이메일 확인 -> 링크를 위해 사용자 정의 페이지의 URL이 만료되었습니다. |
구문 분석 서버는 기본적으로 로그입니다.
로그는 구문 분석 대시 보드에서도 볼 수 있습니다.
각 요청과 응답을 기록하고 싶습니까? parse-server 시작할 때 VERBOSE 환경 변수를 설정하십시오. 사용법 : VERBOSE='1' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY
로그가 다른 폴더에 배치되기를 원하십니까? parse-server 시작할 때 PARSE_SERVER_LOGS_FOLDER 환경 변수를 통과하십시오. 사용법 : PARSE_SERVER_LOGS_FOLDER='<path-to-logs-folder>' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY
특정 레벨을 기록하고 싶습니까? parse-server 시작할 때 logLevel 매개 변수를 전달하십시오. 사용법 : parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --logLevel LOG_LEVEL
새 라인이 구분 된 JSON 오류 로그 (CloudWatch, Google Cloud Logging 등의 소비)를 원하십니까? parse-server 시작할 때 JSON_LOGS 환경 변수를 통과하십시오. 사용법 : JSON_LOGS='1' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY
감가 상각 및 계획된 중단 변경에 대한 개요는 감가 상각 계획을 참조하십시오.
라이브 쿼리는 기존 쿼리 패러다임을 사용하면 응답 시간이 증가하고 네트워크 및 서버 사용량이 높아질 수있는 실시간 반응성 응용 프로그램에 사용됩니다. 데이터베이스에서 제공되는 신선한 데이터로 페이지를 지속적으로 업데이트 해야하는 경우 라이브 쿼리를 사용해야합니다.이 경우 온라인 게임, 메시징 클라이언트 및 공유 할 일 목록에서 발생하는 경우가 종종 있습니다.
Live Query Guide, Live Query Server Setup Guide 및 Live Query 프로토콜 사양을 살펴보십시오. 확장 성을 위해 독립형 서버 또는 여러 인스턴스를 설정할 수 있습니다 (권장).
Facebook에서 개발 한 GraphQL은 API를위한 오픈 소스 데이터 쿼리 및 조작 언어입니다. 기존 REST API 외에도 Parse Server는 현재 응용 프로그램 스키마를 기반으로 GraphQL API를 자동으로 생성합니다. Parse Server를 사용하면 클라우드 코드 기능에 바인딩 될 수있는 사용자 정의 그래프 QL 쿼리 및 돌연변이를 정의 할 수 있습니다.
구문 분석 GraphQL API를 실행하는 가장 쉬운 방법은 CLI를 통한 것입니다.
$ npm install -g parse-server mongodb-runner
$ mongodb-runner start
$ parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://localhost/test --publicServerURL http://localhost:1337/parse --mountGraphQL --mountPlayground서버를 시작한 후 브라우저에서 http : // localhost : 1337/Playground를 방문하여 GraphQL API로 재생할 수 있습니다.
참고 : 프로덕션에서 -마운트 플레이 그라운드 옵션을 사용 하지 마십시오 . Parse Dashboard에는 내장 GraphQL Playground가 있으며 프로덕션 앱에 권장되는 옵션입니다.
Docker 컨테이너 내부에서 구문 분석 GraphQL API를 실행할 수도 있습니다.
$ git clone https://github.com/parse-community/parse-server
$ cd parse-server
$ docker build --tag parse-server .
$ docker run --name my-mongo -d mongo$ docker run --name my-parse-server --link my-mongo:mongo -v config-vol:/parse-server/config -p 1337:1337 -d parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://mongo/test --publicServerURL http://localhost:1337/parse --mountGraphQL --mountPlayground 참고 : 클라우드 코드를 사용하려면 -v cloud-code-vol:/parse-server/cloud --cloud /parse-server/cloud/main.js 위의 명령에 추가하십시오. Parse Server를 시작하기 전에 main.js 가 cloud-code-vol 디렉토리에 있는지 확인하십시오.
서버를 시작한 후 브라우저에서 http : // localhost : 1337/Playground를 방문하여 GraphQL API로 재생할 수 있습니다.
참고 : 프로덕션에서 -마운트 플레이 그라운드 옵션을 사용 하지 마십시오 . Parse Dashboard에는 내장 GraphQL Playground가 있으며 프로덕션 앱에 권장되는 옵션입니다.
express.js 응용 프로그램에서 나머지 API 또는 솔로와 함께 GraphQL API를 장착 할 수도 있습니다. 먼저 새 프로젝트를 만들고 필요한 종속성을 설치해야합니다.
$ mkdir my-app
$ cd my-app
$ npm install parse-server express --save 그런 다음 다음 내용이있는 index.js 파일을 만듭니다.
const express = require ( 'express' ) ;
const { ParseServer , ParseGraphQLServer } = require ( 'parse-server' ) ;
const app = express ( ) ;
const parseServer = new ParseServer ( {
databaseURI : 'mongodb://localhost:27017/test' ,
appId : 'APPLICATION_ID' ,
masterKey : 'MASTER_KEY' ,
serverURL : 'http://localhost:1337/parse' ,
publicServerURL : 'http://localhost:1337/parse'
} ) ;
const parseGraphQLServer = new ParseGraphQLServer (
parseServer ,
{
graphQLPath : '/graphql' ,
playgroundPath : '/playground'
}
) ;
app . use ( '/parse' , parseServer . app ) ; // (Optional) Mounts the REST API
parseGraphQLServer . applyGraphQL ( app ) ; // Mounts the GraphQL API
parseGraphQLServer . applyPlayground ( app ) ; // (Optional) Mounts the GraphQL Playground - do NOT use in Production
await parseServer . start ( ) ;
app . listen ( 1337 , function ( ) {
console . log ( 'REST API running on http://localhost:1337/parse' ) ;
console . log ( 'GraphQL API running on http://localhost:1337/graphql' ) ;
console . log ( 'GraphQL Playground running on http://localhost:1337/playground' ) ;
} ) ;마지막으로 앱을 시작하십시오.
$ npx mongodb-runner start
$ node index.js앱을 시작한 후 브라우저에서 http : // localhost : 1337/Playground를 방문하여 GraphQL API로 재생할 수 있습니다.
참고 : GraphQL 놀이터를 제작에 장착 하지 마십시오 . Parse Dashboard에는 내장 GraphQL Playground가 있으며 프로덕션 앱에 권장되는 옵션입니다.
다음을 실행하십시오.
query Health {
health
}다음 응답을 받아야합니다.
{
"data" : {
"health" : true
}
} 애플리케이션에는 아직 스키마가 없으므로 createClass 돌연변이를 사용하여 첫 번째 클래스를 만들 수 있습니다. 다음을 실행하십시오.
mutation CreateClass {
createClass (
name : " GameScore "
schemaFields : {
addStrings : [{ name : " playerName " }]
addNumbers : [{ name : " score " }]
addBooleans : [{ name : " cheatMode " }]
}
) {
name
schemaFields {
name
__typename
}
}
}다음 응답을 받아야합니다.
{
"data" : {
"createClass" : {
"name" : " GameScore " ,
"schemaFields" : [
{
"name" : " objectId " ,
"__typename" : " SchemaStringField "
},
{
"name" : " updatedAt " ,
"__typename" : " SchemaDateField "
},
{
"name" : " createdAt " ,
"__typename" : " SchemaDateField "
},
{
"name" : " playerName " ,
"__typename" : " SchemaStringField "
},
{
"name" : " score " ,
"__typename" : " SchemaNumberField "
},
{
"name" : " cheatMode " ,
"__typename" : " SchemaBooleanField "
},
{
"name" : " ACL " ,
"__typename" : " SchemaACLField "
}
]
}
}
} Parse Server는 첫 번째 수업에서 당신이 만든 것을 배웠으며 이제 스키마에 GameScore 클래스가 있습니다. 이제 자동으로 생성 된 작업을 시작할 수 있습니다!
첫 번째 개체를 만들려면 다음을 실행하십시오.
mutation CreateGameScore {
createGameScore (
fields : {
playerName : " Sean Plott "
score : 1337
cheatMode : false
}
) {
id
updatedAt
createdAt
playerName
score
cheatMode
ACL
}
}이와 유사한 응답을 받아야합니다.
{
"data" : {
"createGameScore" : {
"id" : " XN75D94OBD " ,
"updatedAt" : " 2019-09-17T06:50:26.357Z " ,
"createdAt" : " 2019-09-17T06:50:26.357Z " ,
"playerName" : " Sean Plott " ,
"score" : 1337 ,
"cheatMode" : false ,
"ACL" : null
}
}
}이 새로운 클래스에 대한 쿼리를 실행할 수도 있습니다.
query GameScores {
gameScores {
results {
id
updatedAt
createdAt
playerName
score
cheatMode
ACL
}
}
}이와 유사한 응답을 받아야합니다.
{
"data" : {
"gameScores" : {
"results" : [
{
"id" : " XN75D94OBD " ,
"updatedAt" : " 2019-09-17T06:50:26.357Z " ,
"createdAt" : " 2019-09-17T06:50:26.357Z " ,
"playerName" : " Sean Plott " ,
"score" : 1337 ,
"cheatMode" : false ,
"ACL" : null
}
]
}
}
}Parse GraphQL Server를 사용하면 자체 쿼리 및 돌연변이가 자동 생성 된 것과 병합 될 맞춤형 그래프 QL 스키마를 만들 수 있습니다. 일반 클라우드 코드 기능을 사용하여 이러한 작업을 해결할 수 있습니다.
사용자 정의 스키마를 만들려면 schema.graphql 파일을 코딩하고 --graphQLSchema 및 --cloud 옵션으로 구문 분석 서버를 초기화해야합니다.
$ parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://localhost/test --publicServerURL http://localhost:1337/parse --cloud ./cloud/main.js --graphQLSchema ./cloud/schema.graphql --mountGraphQL --mountPlayground schema.graphql 및 main.js 파일에 아래 코드를 사용하십시오. 그런 다음 구문 분석 서버를 다시 시작하십시오.
# schema.graphql
extend type Query {
hello : String ! @resolve
} // main.js
Parse . Cloud . define ( 'hello' , async ( ) => {
return 'Hello world!' ;
} ) ;이제 GraphQL Playground를 사용하여 사용자 정의 쿼리를 실행할 수 있습니다.
query {
hello
}아래에 응답을 받아야합니다.
{
"data" : {
"hello" : " Hello world! "
}
}Parse GraphQL 가이드는 Parse GraphQL API를 사용하는 방법을 배우는 매우 좋은 소스입니다.
또한 GraphQL 놀이터 안에 매우 강력한 도구가 있습니다. GraphQL 놀이터의 오른쪽을보십시오. DOCS 및 SCHEMA 메뉴가 표시됩니다. 응용 프로그램 스키마를 분석하여 자동으로 생성됩니다. 그것들을 참조하고 Parse GraphQL API로 할 수있는 모든 것에 대해 자세히 알아보십시오.
또한 GraphQL Learn 섹션은 GraphQL 언어의 힘에 대해 더 많이 배울 수있는 매우 좋은 소스입니다.
기고 가이드를 참조하십시오.
이 프로젝트는 기부 한 모든 사람들 덕분에 존재합니다 ... 우리는이 목록에서 당신의 얼굴을보고 싶습니다!
스폰서가 되어이 프로젝트를 지원하십시오. 귀하의 로고는 귀하의 웹 사이트 링크와 함께 여기에 표시됩니다. 스폰서가 되십시오!
매월 기부금으로 우리를 지원하고 활동을 계속할 수 있도록 도와주세요. 후원자가 되십시오!
[Server-Options] http://parseplatform.org/parse-server/api/release/parseserveroptions.html