



解析服務器是一種開源後端,可以部署到可以運行Node.js的任何基礎架構中。解析服務器可與Express Web應用程序框架一起使用。它可以添加到現有的Web應用程序中,也可以單獨運行。
Wiki中提供了解析服務器的完整文檔。解析服務器指南是入門的好地方。 API參考和雲代碼指南也可用。如果您有興趣開發Parse Server,則開髮指南將幫助您設置。
非常感謝我們支持解析平台開發的讚助商和支持者!
解析服務器有不同分支的不同口味可用:
release-<version>.xx ,例如release-5.xx 。 LTS分支沒有預釋放分支。 為以前的解析服務器專業版本提供了長期支持(LTS)。例如,Parse Server 5.X將接收安全更新,直到解析服務器6.x被解析服務器7.x取代並成為新的LTS版本。噹噹前的主要版本發佈在分支release上時,LTS版本發表在分支release-#.xx上,例如Parse Server 5.x LTS分支的release-5.xx 。
最快,最簡單的入門方法是在本地運行MongoDB和解析服務器。
在開始之前,請確保已安裝:
npm的nodejs對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 | ✅是的 |
使用PostGIS Docker Images,對PostgreSQL和PostGIS的最新發行版進行了對Parse Server的持續測試,以確保兼容性。我們遵循PostgreSQL支持時間表和後GIS支持時間表,僅針對官方支持且未達到其壽命日期的版本進行測試。由於大量的PostgreSQL支持持續時間為5年,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 。在啟動解析服務器之前,請確保main.js在cloud-code-vol目錄中。
您可以將任何任意字符串用作應用程序ID和主密鑰。您的客戶將使用這些用來使用Parse服務器進行身份驗證。
就是這樣!現在,您正在計算機上運行獨立版本的Parse服務器。
使用遠程mongodb?啟動parse-server時,傳遞--databaseURI DATABASE_URI參數。在此處了解有關配置Parse服務器的更多信息。有關可用選項的完整列表,請運行parse-server --help 。
現在您正在運行解析服務器,現在該保存第一個對象了。我們將使用REST API,但是您可以使用任何Parse 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"
}現在,您可以直接檢索此對象(確保用創建對象時收到的實際objectId替換2ntvSpRGIK ):
$ 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,以便深入指南將解析服務器部署到主要的基礎架構提供商。繼續閱讀以了解更多有關運行解析服務器的其他方法。
我們提供了一個基本的Node.js應用程序,該應用程序使用Express上的Parse Server模塊,並且可以輕鬆地部署到各種基礎架構提供商:
您還可以創建解析服務器的實例,並將其安裝在新的或現有的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 -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 -Options]。
appId (必需) - 使用此服務器實例託管的應用ID。您可以使用任何任意字符串。對於遷移的應用程序,這應該與您的託管解析應用程序匹配。masterKey (必需) - 用於覆蓋ACL安全性的主密鑰。您可以使用任何任意字符串。保密!對於遷移的應用程序,這應該與您的託管解析應用程序匹配。databaseURI (必需) - 數據庫的連接字符串,即mongodb://user:[email protected]/dbname 。如果您的密碼具有特殊字符,請確保編碼密碼。port - 默認端口為1337,指定此參數以使用其他端口。serverURL解析服務器的URL(不要忘記指定http://或https://)。從雲代碼提出請求解析服務器時,將使用此URL。cloud - 雲代碼main.js文件的絕對路徑。push - APN和GCM推送的配置選項。請參閱快速啟動推送通知。 對於解析服務器,不再需要與Parse一起使用的客戶端密鑰。如果您希望仍然需要它們,也許可以拒絕訪問老年客戶端,則可以在初始化時設置鑰匙。設置這些密鑰中的任何一個都需要所有請求以提供一個配置的密鑰之一。
clientKeyjavascriptKeyrestAPIKeydotNetKey| 範圍 | 內部數據 | 只讀數據(1) | 自定義數據 | 受CLP限制,ACL | 鑰匙 |
|---|---|---|---|---|---|
| 內部的 | r/w | r/w | r/w | 不 | maintenanceKey |
| 掌握 | - / - | r/ - | r/w | 不 | masterKey |
| Readonlymaster | - / - | r/ - | r/ - | 不 | readOnlyMasterKey |
| 會議 | - / - | r/ - | r/w | 是的 | sessionToken |
(1) Parse.Object.createdAt , Parse.Object.updatedAt 。
驗證用戶電子郵件地址並通過電子郵件重置密碼需要電子郵件適配器。社區提供和維護許多電子郵件適配器。以下是帶有示例電子郵件適配器的示例配置。有關更多詳細信息,請參見[Parse Server選項] [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平台維護的官方電子郵件適配器:
社區貢獻的電子郵件適配器:
設置滿足您安全要求的密碼和帳戶策略。以下是示例配置。有關更多詳細信息,請參見[Parse Server選項] [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 ,
} ,
} ) ; 謹慎,這是一個實驗特徵,可能不適合生產。
自定義路線允許使用網頁構建用戶流,類似於現有密碼重置和電子郵件驗證功能。自定義路由在Parse服務器配置中使用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' } ;
}
} ]
}
}可以通過向以下方式發送GET請求來調用上述路由: https://[parseServerPublicUrl]/[parseMount]/[pagesEndpoint]/[appId]/[customRoute]
handler接收request ,並從pages.pagesPath返回custom_page.html網頁。以這種方式構建自定義路線的優點是,它會自動利用Parse Server的內置功能,例如頁面本地化和動態佔位符。
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可以具有兩個路由,即GET和POST路由,該路由將根據HTTP請求方法調用。 | |
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或查看Parse服務器配置。
所有官方適配器均以NPM(@parse)的範圍範圍的範圍分發。
Parse Server模塊組織中還提供了一些維護良好的適配器。
您還可以通過在NPM上搜索社區維護的更多適配器。
解析服務器允許開發人員在託管文件時從幾個選項中進行選擇:
GridFSBucketAdapter由MongoDB支持S3Adapter由亞馬遜S3支持GCSAdapter由Google Cloud Storage支持FSAdapter本地文件存儲默認情況下使用GridFSBucketAdapter ,不需要設置,但是如果您有興趣使用Amazon S3,Google Cloud Storage或本地文件存儲,則可以在“ Parse Server指南”中獲得其他配置信息。
謹慎,這是一個實驗特徵,可能不適合生產。
此功能將重複數據刪除由Parse Server多次收到的相同請求,通常是由於網絡問題或移動操作系統上的網絡適配器訪問限制。
相同的請求由其請求標題X-Parse-Request-Id確定。因此,客戶請求必須包括此標頭以進行重複數據刪除。不包含此標頭的請求不能被重複地重複解复,並且通過Parse Server正常處理。這意味著向客戶端推出此功能是無縫的,因為啟用此功能時,解析服務器仍在沒有此標頭的情況下處理請求。
需要在客戶端啟用此功能以發送標頭和服務器以處理標題。請參閱特定的Parse SDK文檔,以查看是否支持該功能。
重複數據刪除僅用於對象創建和更新( POST和PUT請求)。對於對象查找和刪除( GET和DELETE請求),重複數據刪除尚未進行,因為根據定義,這些操作已經存在。
let api = new ParseServer({
idempotencyOptions: {
paths: [".*"], // enforce for all requests
ttl: 120 // keep request IDs for 120s
}
}
| 範圍 | 選修的 | 類型 | 預設值 | 示例值 | 環境變量 | 描述 |
|---|---|---|---|---|---|---|
idempotencyOptions | 是的 | Object | undefined | parse_server_experimentim_idempotency_options | 設置此啟用指定路徑的勢力執行。 | |
idempotencyOptions.paths | 是的 | Array<String> | [] | .* (所有路徑,包括下面的示例),functions/.* (所有功能),jobs/.* (所有工作),classes/.* (所有類),functions/.* (所有功能),users (用戶創建 /更新),installations (安裝創建 /更新) | parse_server_experimenty_idempotency_paths | 一系列路徑模式必須匹配要啟用請求重複數據刪除的請求路徑。不得包含安裝路徑,例如與請求路徑/parse/functions/myFunction匹配指定路徑模式functions/myFunction 。忽略了請求路徑的落後斜線,例如路徑模式functions/myFunction與/parse/functions/myFunction和/parse/functions/myFunction/ 。 |
idempotencyOptions.ttl | 是的 | Integer | 300 | 60 (60秒) | parse_server_experimenty_idempotency_ttl | 在幾秒鐘內將請求記錄從數據庫中丟棄的持續時間。由於網絡問題而引起的重複請求,預計將在毫秒內到達幾秒鐘。該值必須大於0 。 |
要在Postgres中使用此功能,您需要使用PGADMIN創建一個CRON作業,或類似地調用Postgres函數idempotency_delete_expired_records() ,以刪除過期的IDEMTOTENCY RECORDS。您可以在下面找到一個示例腳本。確保腳本具有與解析服務器相同的特權。
#! /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 path。pages.customUrls ,即使設置了特徵頁面的本地化(例如密碼重置,電子郵件驗證),即使設置了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語法,該語法通常由翻譯平台支持,使其易於管理翻譯,導出它們以供Parse服務器使用,甚至可以自動化此工作流程。
示例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 ,Error, locale ,Locale, publicServerUrl ,Token, 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 | 如果響應應始終是重定向而不滿足,則是true ,如果響應類型應取決於請求類型( GET請求 - > content響應; POST request->重定向響應),則為false 。 |
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 | 自定義頁面的網址進行電子郵件驗證 - >鏈接發送失敗。 |
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
請參閱“折舊計劃”,以概述折舊和計劃的破壞變化。
實時查詢旨在用於實時反應性應用程序中,其中僅使用傳統查詢範式可能會引起幾個問題,例如增加響應時間以及高網絡和服務器使用情況。在您需要連續更新一個來自數據庫的新數據的頁面的情況下,應使用實時查詢,該數據通常發生在(但不限於)在線遊戲,消息傳遞客戶端和共享待辦事項列表中。
查看實時查詢指南,實時查詢服務器設置指南和實時查詢協議規範。您可以設置獨立服務器或多個實例以進行可擴展性(建議)。
Facebook開發的GraphQL是一種用於API的開源數據查詢和操縱語言。除了傳統的REST API外,Parse Server還根據您當前的應用程序架構自動生成GraphQL API。 Parse Server還允許您定義自定義的GraphQl查詢和突變,它們的解析器可以綁定到您的雲代碼功能。
運行Parse 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儀表板具有一個內置的GraphQl操場,它是生產應用程序的推薦選項。
您還可以在Docker容器中運行Parse 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 。在啟動解析服務器之前,請確保main.js在cloud-code-vol目錄中。
啟動服務器後,您可以在瀏覽器中訪問http:// localhost:1337/Playground,以開始使用GraphQL API。
注意:不要在生產中使用 - 蒙特萊格期選項。 Parse儀表板具有一個內置的GraphQl操場,它是生產應用程序的推薦選項。
您也可以將GraphQl API與REST API或SOLO一起安裝在Express.js應用程序中。您首先需要創建一個新項目並安裝所需的依賴項:
$ 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儀表板具有一個內置的GraphQl操場,它是生產應用程序的推薦選項。
運行以下內容:
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 "
}
]
}
}
}解析服務器從您創建的第一堂課中學到了學會,現在您在模式中擁有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允許您創建一個自定義的GraphQL模式,其中包含自己的查詢和突變與自動生成的架構合併。您可以使用常規的雲代碼功能解決這些操作。
要開始創建自定義模式,您需要編碼schema.graphql文件,並使用--graphQLSchema和--cloud選項初始化Parse Server:
$ 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! "
}
}解析GraphQL指南是學習如何使用Parse GraphQl API的一個很好的來源。
您的GraphQL操場上還擁有一個非常強大的工具。請查看GraphQL操場的右側。您會看到DOCS和SCHEMA菜單。它們是通過分析您的應用程序架構自動生成的。請參考它們,並了解有關您可以使用Parse GraphQL API的所有內容。
此外,GraphQL學習部分是了解GraphQL語言功能的更多信息。
請參閱貢獻指南。
由於所有貢獻的人……我們很想在清單上看到您的臉!
通過成為贊助商來支持這個項目。您的徽標將在此處顯示您網站的鏈接。成為贊助商!
每月捐款支持我們,並幫助我們繼續我們的活動。成為支持者!
[server-options] http://parseplatform.org/parse-server/api/release/parseserveroptions.html