



Parse Server - это бэкэнд с открытым исходным кодом, который можно развернуть в любой инфраструктуре, которая может запускать Node.js. Parse Server работает с рамки Express Web Application. Он может быть добавлен в существующие веб -приложения или запустить себя.
Полная документация для сервера Parse доступна в вики. Руководство по серверу Parse - хорошее место для начала. Ссылка на API и руководство по облачному коду также доступна. Если вы заинтересованы в разработке для сервера Parse, Руководство по разработке поможет вам настроить.
Большое спасибо нашим спонсорам и спонсорам, которые поддерживают разработку платформы Parse!
Parse Server доступен в разных ароматах на разных ветвях:
release-<version>.xx , например release-5.xx . В филиалах LTS нет предварительных ветвей. Долгосрочная поддержка (LTS) предоставлена для предыдущей основной версии сервера Parse. Например, Parse Server 5.x получит обновления безопасности до тех пор, пока Parse Server 6.x не будет заменен Parse Server 7.x и станет новой версией LTS. В то время как текущая основная версия опубликована в release Branch, версия LTS публикуется в Franch release-#.xx , например, release-5.xx для Branch Parse Server 5.x LTS.
Самый быстрый и простой способ начать работу - это запустить MongoDB и Parse Server.
Прежде чем начать, убедитесь, что вы установили:
npmParse Server непрерывно протестирован с самыми последними выпусками Node.js для обеспечения совместимости. Мы следим за долгосрочным планом поддержки Node.js и тестируем только версии, которые официально поддерживаются и не достигли даты своего окончания жизни.
| Версия | Последняя версия | Конец жизни | Совместимый |
|---|---|---|---|
| Node.js 18 | 18.20.4 | Апрель 2025 года | ✅ Да |
| Node.js 20 | 20.15.1 | Апрель 2026 года | ✅ Да |
| Node.js 22 | 22.4.1 | Апрель 2027 г. | ✅ Да |
Parse Server непрерывно протестирован с самыми последними выпусками MongoDB для обеспечения совместимости. Мы следуем графику поддержки MongoDB и графику жизненного цикла MongoDB и тестируем только версии, которые официально поддерживаются и не достигли даты окончания жизни. MongoDB «быстрые выпуски» игнорируются, так как они считаются предварительными отдачами следующей крупной версии.
| Версия | Последняя версия | Конец жизни | Совместимый |
|---|---|---|---|
| MongoDB 4.2 | 4.2.25 | Апрель 2023 года | ✅ Да |
| MongoDB 4.4 | 4.4.29 | Февраль 2024 г. | ✅ Да |
| MongoDB 5 | 5.0.26 | Октябрь 2024 г. | ✅ Да |
| Mongodb 6 | 6.0.14 | Июль 2025 года | ✅ Да |
| Mongodb 7 | 7.0.8 | TDB | ✅ Да |
| Mongodb 8 | 8.0.0 | TDB | ✅ Да |
Parse Server непрерывно протестирован с самыми последними выпусками PostgreSQL и PostGIS для обеспечения совместимости, используя изображения PostGIS Docker. Мы следим за графиком поддержки PostgreSQL и графике поддержки PostGIS и тестируем только версии, которые официально поддерживаются и не достигли даты окончания жизни. Из-за обширной продолжительности поддержки PostgreSQL 5 лет, Parse Server отказывается от поддержки примерно за 2 года до официальной даты окончания жизни.
| Версия | Постгис версия | Конец жизни | Поддержка сервера Parse | Совместимый |
|---|---|---|---|---|
| Postgres 13 | 3.1, 3,2, 3,3, 3,4, 3,5 | Ноябрь 2025 года | <= 6.x (2023) | ✅ Да |
| Postgres 14 | 3.5 | Ноябрь 2026 года | <= 7.x (2024) | ✅ Да |
| Postgres 15 | 3.5 | Ноябрь 2027 года | <= 8.x (2025) | ✅ Да |
| Postgres 16 | 3.5 | Ноябрь 2028 года | <= 9.x (2026) | ✅ Да |
| Postgres 17 | 3.5 | Ноябрь 2029 года | <= 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 ПРИМЕЧАНИЕ. Если установка с -g сбой из -за проблем с разрешением ( npm ERR! code 'EACCES' ), пожалуйста, обратитесь к этой ссылке.
$ 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 перед запуском сервера Parse.
Вы можете использовать любую произвольную строку в качестве идентификатора вашего приложения и мастер -ключа. Они будут использоваться вашими клиентами для аутентификации с сервером Parse.
Вот и все! Сейчас вы используете отдельную версию Parse Server на своей машине.
Используете удаленный монгодб? Пройдите параметр --databaseURI DATABASE_URI при запуске parse-server . Узнайте больше о настройке сервера Parse здесь. Для полного списка доступных вариантов запустите parse-server --help .
Теперь, когда вы запускаете Parse Server, пришло время сохранить свой первый объект. Мы используем API REST, но вы можете легко сделать то же самое, используя любой из 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 "
}Однако отслеживание отдельных идентификаторов объекта не идеально. В большинстве случаев вы захотите запустить запрос над коллекцией, например, так:
$ 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, ознакомьтесь с документацией Parse.
Parse предоставляет SDK для всех основных платформ. См. Руководство по серверу Parse, чтобы узнать, как подключить ваше приложение к серверу Parse.
После того, как вы лучше понимаете, как работает проект, пожалуйста, обратитесь к Wiki Parse Server для подробных руководств для развертывания сервера Parse для крупных поставщиков инфраструктуры. Читайте дальше, чтобы узнать больше о дополнительных способах запуска сервера Parse.
Мы предоставили базовое приложение Node.js, которое использует модуль Parse Server на Express и может быть легко развернута для различных поставщиков инфраструктуры:
Вы также можете создать экземпляр Parse Server и установить его на новом или существующем Express Websion:
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 Server, отправив запрос в конечную точку /parse/health .
Ответ выглядит так:
{
"status" : " ok "
}| Ценить | Описание |
|---|---|
initialized | Сервер был создан, но метод start еще не был вызван. |
starting | Сервер запускается. |
ok | Сервер начался и работает. |
error | Была ошибка запуска, см. Журналы для деталей. |
Сервер Parse может быть настроен с использованием следующих параметров. Вы можете передавать их в виде параметров при запуске автономного parse-server или загрузки файла конфигурации в формате JSON с использованием parse-server path/to/configuration.json . Если вы используете Parse Server на Express, вы также можете передать их объекту ParseServer в качестве параметров.
Для полного списка доступных параметров запустите parse-server --help или посмотрите на [Parse Server Configurations] [Server-Options].
appId (обязательно) - идентификатор приложения для хоста с этим экземпляром сервера. Вы можете использовать любую произвольную строку. Для мигрированных приложений это должно соответствовать вашему размещению приложения Parse.masterKey (требуется) - основной ключ для использования для переоценки безопасности ACL. Вы можете использовать любую произвольную строку. Держите это в секрете! Для мигрированных приложений это должно соответствовать вашему размещению приложения Parse.databaseURI (требуется) - строка подключения для вашей базы данных, то есть mongodb://user:[email protected]/dbname . Убедитесь, что URL Кодируйте ваш пароль, если ваш пароль имеет специальные символы.port - порт по умолчанию составляет 1337, укажите этот параметр для использования другого порта.serverURL - URL на ваш сервер Parse (не забудьте указать http: // или https: //). Этот URL будет использоваться при выполнении запросов на сервер Parse из облачного кода.cloud - Абсолютный путь к вашему облачному коду main.js файл.push - параметры конфигурации для APN и GCM Push. Смотрите быстрый старт уведомлений Push. Клиентские ключи, используемые с Parse, больше не нужны для сервера 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-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-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 в конфигурации сервера Parse:
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 и возвращает веб -страницу custom_page.html с каталога pages.pagesPath в качестве ответа. Преимущество создания пользовательского маршрута таким образом заключается в том, что он автоматически использует встроенные возможности 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 отличается, например, Path 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"
}
} ) Вы можете настроить сервер Parse с помощью переменных среды:
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.
Все официальные адаптеры распространяются в виде пакетов Scoped на NPM (@Parse).
Некоторые ухоженные адаптеры также доступны в организации модулей Server Parse.
Вы также можете найти больше адаптеров, поддерживаемых сообществом, поиска на NPM.
Parse Server позволяет разработчикам выбирать из нескольких вариантов при размещении файлов:
GridFSBucketAdapter - который поддерживается MongoDBS3Adapter - который поддерживается Amazon S3GCSAdapter - который поддерживается Google Cloud StorageFSAdapter - локальное хранилище файлов GridFSBucketAdapter используется по умолчанию и не требует настройки, но если вы заинтересованы в использовании Amazon S3, Google Cloud Storage или локального хранилища файлов, в Руководстве по серверу Parse доступна дополнительная информация о конфигурации.
Осторожно, это экспериментальная особенность, которая может не подходить для производства.
Эта функция осуществляет идентичные запросы, которые принимаются сервером Parse несколько раз, как правило, из -за проблем с сетью или ограничений доступа к сетевым адаптером в мобильных операционных системах.
Идентичные запросы идентифицируются их заголовком запроса X-Parse-Request-Id . Поэтому запрос клиента должен включить этот заголовок для применения дедупликации. Запросы, которые не содержат этот заголовок, не могут быть дедупликации и обычно обрабатываются Server Server. Это означает, что развертывание этой функции для клиентов беспроблемное, так как сервер Parse по -прежнему обрабатывает запросы без этого заголовка, когда эта функция включена.
Эта функция должна быть включена на стороне клиента, чтобы отправить заголовок и на сервере для обработки заголовка. Обратитесь к конкретным документам 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_experimental_idempotency_options | Установка этого обеспечивает применение идентичности для указанных путей. | |
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, вам нужно будет создать задание Cron, используя pgadmin или аналогично вызову функции Postgres idempotency_delete_expired_records() , которая удаляет записи оноэмпоттенции с истекшим сроком действия. Вы можете найти пример сценария ниже. Убедитесь, что сценарий имеет те же привилегии для входа в Postgres, что и сервер Parse.
#! /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 , задание Cron, которая запускает сценарий каждые 2 минуты может выглядеть как:
2 * * * * /root/parse_idempotency_delete_expired_records.sh > /dev/null 2>&1 Осторожно, это экспериментальная особенность, которая может не подходить для производства.
Пользовательские страницы, а также страницы функций (например, сброс пароля, проверка электронной почты) могут быть локализованы с опцией pages в конфигурации сервера Parse:
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 Кастомурлы, даже если пользовательские URL -адреса указывают на страницы на пути страниц..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 fileФайл ресурса JSON слабо следит за синтаксисом 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 , 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 | Это true если ответы всегда должны быть перенаправления и никогда не содержание, false если тип ответа должен зависеть от типа запроса ( GET запрос -> Ответ содержимого; POST Request -> Redirect Office). |
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 -адрес на пользовательскую страницу для проверки электронной почты -> ссылка Отправить 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, по умолчанию, журнал:
Журналы также можно просмотреть на панели панели Parse.
Хотите зарегистрировать каждый запрос и ответ? Установите переменную VERBOSE среды при запуске parse-server . Использование: VERBOSE='1' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY
Хотите, чтобы журналы были размещены в другой папке? Передайте переменную среды PARSE_SERVER_LOGS_FOLDER при запуске parse-server . Использование: PARSE_SERVER_LOGS_FOLDER='<path-to-logs-folder>' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY
Хотите регистрировать конкретные уровни? Пропустите параметр logLevel при запуске parse-server . Использование: parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --logLevel LOG_LEVEL
Хотите новую линию разграниченных журналов ошибок JSON (для потребления CloudWatch, Google Cloud Logging и т. Д.)? Пройдите переменную среды JSON_LOGS при запуске parse-server . Использование: JSON_LOGS='1' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY
См. План осмотра для обзора детекций и запланированных изменений в нарушение.
Живые запросы предназначены для использования в реактивных приложениях в реальном времени, где просто использование традиционной парадигмы запроса может вызвать несколько проблем, таких как увеличение времени отклика и высокое использование сети и сервера. Живые запросы должны использоваться в тех случаях, когда вам необходимо постоянно обновлять страницу со свежими данными, поступающей из базы данных, которые часто случаются в (но не ограничиваются) онлайн-играми, обмена клиентами и общими списками дел.
Взгляните на Live Ride Guide, Live Query Server Руководство по настройке и спецификации протокола протокола живого запроса. Вы можете настроить автономный сервер или несколько экземпляров для масштабируемости (рекомендуется).
GraphQL, разработанный Facebook, является языком запросов данных и манипуляций с открытым исходным кодом для API. В дополнение к традиционному API REST, сервер Parse автоматически генерирует API GraphQL на основе вашей текущей схемы приложения. Parse Server также позволяет вам определить ваши пользовательские запросы и мутации GraphQL, чьи разрешения могут быть связаны с вашими функциями облачного кода.
Самый простой способ запустить API Parse GraphQL - через 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 в вашем браузере, чтобы начать играть с вашим API GraphQL.
Примечание. Не используйте -MountPlayground Option в производстве. Dashboard Parse имеет встроенную игровую площадку GraphQL, и это рекомендуемый вариант для производственных приложений.
Вы также можете запустить API Parse GraphQL внутри контейнера Docker:
$ 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 перед запуском сервера Parse.
После запуска сервера вы можете посетить http: // localhost: 1337/Playground в вашем браузере, чтобы начать играть с вашим API GraphQL.
Примечание. Не используйте -MountPlayground Option в производстве. Dashboard Parse имеет встроенную игровую площадку GraphQL, и это рекомендуемый вариант для производственных приложений.
Вы также можете установить API GraphQL в приложении Express.js вместе с API или соло REST. Сначала вам нужно создать новый проект и установить необходимые зависимости:
$ 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 в вашем браузере, чтобы начать играть с вашим API GraphQL.
Примечание. Не установите игровую площадку GraphQL в производстве. Dashboard 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 "
}
]
}
}
} 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 позволяет создавать пользовательскую схему GraphQL с собственными запросами и мутациями, которые должны быть объединены с автоматическими сгенерированными. Вы можете разрешить эти операции, используя ваши обычные функции облачного кода.
Чтобы --cloud создание вашей пользовательской схемы, --graphQLSchema необходимо кодировать файл schema.graphql .
$ 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 Затем перезапустите свой сервер Parse.
# schema.graphql
extend type Query {
hello : String ! @resolve
} // main.js
Parse . Cloud . define ( 'hello' , async ( ) => {
return 'Hello world!' ;
} ) ;Теперь вы можете запустить свой пользовательский запрос, используя Playground GraphQL:
query {
hello
}Вы должны получить ответ ниже:
{
"data" : {
"hello" : " Hello world! "
}
}Руководство Parse GraphQL является очень хорошим источником для обучения, как использовать API Parse GraphQL.
У вас также есть очень мощный инструмент на вашей игровой площадке GraphQL. Пожалуйста, посмотрите на правую сторону своей игровой площадки GraphQL. Вы увидите меню DOCS и SCHEMA . Они автоматически генерируются путем анализа вашей схемы приложения. Пожалуйста, обратитесь к ним и узнайте больше обо всем, что вы можете сделать со своим API Parse GraphQL.
Кроме того, раздел GraphQL Learn является очень хорошим источником, чтобы узнать больше о силе языка GraphQL.
См. Руководство по содействию.
Этот проект существует благодаря всем людям, которые вносят свой вклад ... мы хотели бы увидеть ваше лицо в этом списке!
Поддержите этот проект, став спонсором. Ваш логотип будет отображаться здесь со ссылкой на ваш сайт. Станьте спонсором!
Поддержите нас ежемесячным пожертвованием и помогите нам продолжить нашу деятельность. Станьте покровителем!
[Server-Options] http://parseplatform.org/parse-server/api/release/parseserveroptions.html