Parse Server
Контейнер (#docker-container)
Запуск Parse Server в другом месте (#running-parse-server-elsewhere)
Состояние сервера Parse (#parse-server-health)
Конфигурация (#configuration)
Устаревания (#deprecations).
Live Query (#live-query).
GraphQL (#graphql)
Внесение вклада (#contributing).
Участники (#contributors).
Спонсоры (#sponsors).
Поддержавшие проект (#backers).
Parse Server доступен в различных вариантах на разных ветках:
release-#.x.x
, например release-5.x.x
для ветки Parse Server 5.x LTS.Долгосрочная поддержка (LTS) предназначена для предыдущей основной версии Parse Server. Мы предоставляем обновления безопасности для LTS-версии, но основное внимание уделяем разработке текущей основной версии и подготовке следующего основного выпуска. Поэтому мы можем оставить некоторые уязвимости на усмотрение сообщества. Чтобы узнать о текущих открытых уязвимостях для этой LTS-ветки, ищите запросы на вытягивание с конкретной базой LTS.
Самый быстрый и простой способ начать работу — запустить MongoDB и Parse Server локально.
Перед началом убедитесь, что вы установили:
Parse Server постоянно тестируется с последними выпусками Node.js для обеспечения совместимости. Мы следуем политике [долгосрочной поддержки Node.js]. План](https://github.com/nodejs/Release) и тестирование только с версиями, которые официально поддерживаются и не достигли даты окончания поддержки.
Версия | Последняя версия | Дата окончания поддержки | Совместимость |
---|---|---|---|
Node.js 18 | 18.20.0 | Апрель 2025 | ✅ Да |
Node.js 20 | 20.12.0 | Апрель 2026 | ✅ Да |
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 | ✅ Да |
Parse Server постоянно тестируется с последними выпусками PostgreSQL и PostGIS для обеспечения совместимости, используя образы Docker PostGIS. Мы следуем графику поддержки PostgreSQL и графику поддержки PostGIS и тестируем только те версии, которые официально поддерживаются и не достигли даты окончания поддержки. Из-за обширной продолжительности поддержки PostgreSQL в 5 лет Parse Server прекращает поддержку примерно за 2 года до официальной даты окончания поддержки.
Версия | Версия PostGIS | Дата окончания поддержки | Поддержка Parse Server | Совместимость |
---|---|---|---|---|
Postgres 13 | 3.1, 3.2, 3.3, 3.4 | Ноябрь 2025 | <= 6.x (2023) | ✅ Да |
Postgres 14 | 3.4 | Ноябрь 2026 | <= 7.x (2024) | ✅ Да |
Postgres 15 | 3.4 | Ноябрь 2027 | <= 8.x (2025) | ✅ Да |
Postgres 16 | 3.4 | Ноябрь 2028 | <= 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
Примечание: Если вы хотите использовать Cloud Code, добавьте -v cloud-code-vol:/parse-server/cloud --cloud /parse-server/cloud/main.js
в команду выше. Перед запуском Parse Server убедитесь, что main.js
находится в каталоге cloud-code-vol
.
Вы можете использовать любую произвольную строку в качестве идентификатора приложения и мастер-ключа. Они будут использоваться вашими клиентами для аутентификации на сервере Parse.
Вот и всё! Теперь у вас есть автономная версия сервера Parse на вашем компьютере.
Используя удалённый MongoDB? Передайте параметр --databaseURI DATABASE_URI
при запуске parse-server
. Узнайте больше о настройке сервера Parse здесь. Для получения полного списка доступных опций запустите parse-server
. Сохранение объекта
Теперь, когда вы запустили Parse Server, пришло время сохранить ваш первый объект. Мы будем использовать REST API (http://docs.parseplatform.org/rest/guide), но вы можете легко сделать то же самое, используя любой из Parse SDKs (http://parseplatform.org/#sdks). Выполните следующее:
$ 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
// Ответ
{
"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
// Ответ предоставит все соответствующие объекты в массиве `results`:
{
"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 Server, ознакомьтесь с документацией Parse (http://docs.parseplatform.org).
Подключение SDK
Parse предоставляет SDK для всех основных платформ. Обратитесь к руководству Parse Server, чтобы узнать, как подключить ваше приложение к Parse Server (https://docs.parseplatform.org/parse-server/guide/#using-parse-sdks-with-parse-server).
Как только вы лучше поймёте, как работает проект, обратитесь к вики Parse Server (https://github.com/parse-community/parse-server-wiki) за подробными руководствами по развёртыванию Parse Server у основных поставщиков инфраструктуры. Читайте дальше, чтобы узнать больше о дополнительных способах запуска Parse Server.
Мы предоставили базовое приложение Node.js (https://github.com/parse-community/parse-server-example), которое использует модуль Parse Server на 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' // Не забудьте изменить на https, если необходимо
});
// Запускаем сервер
await server.start();
// Служим API Parse на префиксе URL /parse
app.use('/parse', server.app);
app.listen(1337, function() {
console.log('parse-server-example работает на порту 1337.');
});
Для получения полного списка доступных опций запустите parse-server --help
или ознакомьтесь с Конфигурациями сервера Parse.
Проверьте состояние сервера Parse, отправив запрос на конечную точку /parse/health
.
Ответ выглядит следующим образом:
{
"status": "ok"
}
Значение | Описание |
---|---|
initialized |
Сервер был создан, но метод start ещё не был вызван. |
starting |
Сервер запускается. |
ok |
Сервер запущен и работает. |
error |
Произошла ошибка при запуске, подробности см. в журналах. |
Сервер Parse можно настроить с помощью следующих параметров. Вы можете передать их как параметры при запуске автономного parse-сервера
или загрузив файл конфигурации в формате JSON с помощью parse-сервер путь/к/конфигурации.json
. Если вы используете сервер Parse на Express, вы также можете передать эти параметры объекту ParseServer
в качестве опций.
Полный список доступных опций можно получить, запустив parse-server --help
, или ознакомиться с Конфигурациями сервера Parse.
appId
(обязательно) — идентификатор приложения для размещения в этом экземпляре сервера. Можно использовать любую произвольную строку. Для перенесённых приложений он должен соответствовать вашему размещённому приложению Parse.masterKey
(обязательно) — мастер-ключ для переопределения безопасности ACL. Можно использовать любую произвольную строку. Храните его в секрете! Для перенесённых приложений он должен соответствовать вашему размещённому приложению Parse.databaseURI
(обязательно) — строка подключения к вашей базе данных, например, mongodb://user:pass@host.com/dbname
. Обязательно URL-кодируйте свой пароль, если ваш пароль содержит специальные символы.port
— порт по умолчанию — 1337. Укажите этот параметр, чтобы использовать другой порт.serverURL
— URL вашего сервера Parse (не забудьте указать http:// или https://). Этот URL будет использоваться при отправке запросов на сервер Parse из облачного кода.cloud
— абсолютный путь к файлу main.js
вашего облачного кода.push
— параметры конфигурации для APNS и GCM push. См. Быстрый старт уведомлений Push.Клиентские ключи, используемые с Parse, больше не нужны с сервером Parse. Если вы хотите продолжать их использовать, возможно, чтобы иметь возможность отказывать в доступе старым клиентам, вы можете установить ключи во время инициализации. Установка любого из этих ключей потребует от всех запросов предоставления одного из настроенных ключей.
clientKey
javascriptKey
restAPIKey
dotNetKey
Область | Внутренние данные | Только для чтения (1) | Пользовательские данные | Ограничено CLP, ACL | Ключ |
---|---|---|---|---|---|
Внутренняя | r/w | r/w | r/w | нет | maintenanceKey |
Мастер | -/- | r/- | r/w | нет | masterKey |
Только для чтения мастер | -/- | r/- | r/- | нет | readOnlyMasterKey |
(1) Parse.Object.createdAt
, Parse.Object.updatedAt
.
Проверка адресов электронной почты пользователей и сброс пароля через электронную почту требуют наличия адаптера электронной почты. Существует множество адаптеров электронной почты, предоставляемых и поддерживаемых сообществом. Ниже приведён пример конфигурации с использованием примера адаптера электронной почты. Более подробную информацию и полный список доступных опций см. в разделе «Параметры сервера Parse» (https://parseplatform.org/parse-server/api/master/ParseServerOptions.html).
const server = ParseServer({
...otherOptions,
// Включить проверку электронной почты пользователя
verifyUserEmails: true,
// Установить срок действия токена для проверки электронной почты равным 2 часам
emailVerifyTokenValidityDuration: 2 * 60 * 60,
// Задать адаптер электронной почты
emailAdapter: {
module: 'example-mail-adapter',
options: {
// Дополнительные опции адаптера
...mailAdapterOptions
}
},
});
Официальные адаптеры электронной почты, поддерживаемые платформой Parse:
Адаптеры электронной почты от сообщества:
Установите политику паролей и учётных записей, соответствующую вашим требованиям безопасности. Ниже приведён пример конфигурации. Более подробную информацию и полный список доступных опций см. в разделе «Параметры сервера Parse» (https://parseplatform.org/parse-server/api/master/ParseServerOptions.html).
const server = ParseServer({
...otherOptions,
// Политика блокировки учётной записи
accountLockout: {
// Блокировать учётную запись на 5 минут
duration: 5,
// Блокировать учётную запись после 3 неудачных попыток входа
threshold: 3,
// Разблокировать учётную запись после успешного сброса пароля
unlockOnPasswordReset: true,
},
// Политика паролей
passwordPolicy: {
// Требовать пароль длиной не менее 8 символов, содержащий хотя бы одну строчную букву, одну прописную букву и одну цифру
validatorPattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})/,
// Запретить использование имени пользователя в качестве части пароля
doNotAllowUsername: true,
// Не разрешать повторное использование последних 5 паролей при установке нового пароля
maxPasswordHistory: 5,
}
});
Внимание, это экспериментальная функция, которая может не подходить для производственной среды.
Пользовательские маршруты позволяют создавать пользовательские потоки с веб-страницами, подобно существующим функциям сброса пароля и проверки электронной почты. Пользовательские маршруты определяются с помощью параметра pages
в конфигурации сервера Parse.
const api = new ParseServer({
...otherOptions,
pages: {
enableRouter: true, // Включает экспериментальную функцию; требуется для пользовательских маршрутов
customRoutes: [{
method: 'GET',
path: 'custom_route',
handler: async request => {
// Пользовательская логика
// ...
// Затем, в зависимости от результата, вернуть HTML-файл в ответ
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_SERVER_PAGES_ENABLE_ROUTER |
Верно, если маршрутизатор страниц должен быть включен; это необходимо для того, чтобы какие-либо опции страниц вступили в силу. Внимание, это экспериментальная функция, которая может не подходить для производства. |
pages.customRoutes |
да | Array |
[] |
- | PARSE_SERVER_PAGES_CUSTOM_ROUTES |
Пользовательские маршруты. Маршруты добавляются в порядке их определения здесь, что следует учитывать, поскольку запросы проходят по маршрутам упорядоченным образом. Пользовательские маршруты проходят после встроенных маршрутов, таких как сброс пароля и проверка электронной почты. |
pages.customRoutes.method |
String |
- |
GET , POST
|
- | Метод HTTP пользовательского маршрута. | |
pages.customRoutes.path |
String |
- | custom_page |
- | Путь пользовательского маршрута. Обратите внимание, что один и тот же путь можно использовать, если метод отличается, например, путь custom_page может иметь два маршрута, маршрут GET и маршрут POST , которые будут вызываться в зависимости от метода HTTP-запроса. |
|
pages.customRoutes.handler |
AsyncFunction |
- | async () => { ... } |
- | Обработчик маршрута, который... is invoked when the route matches the HTTP request. Если обработчик не возвращает страницу, на запрос отвечают ответом 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:
$ PORT=8080 parse-server --appId APPLICATION_ID --masterKey MASTER_KEY
Полный список настраиваемых переменных среды можно получить, выполнив команду parse-server --help
или обратившись к Parse Server Configuration.
Все официальные адаптеры распространяются в виде пакетов с ограниченной областью действия на npm (@parse).
Некоторые хорошо поддерживаемые адаптеры также доступны в организации Parse Server Modules.
Также вы можете найти больше адаптеров, поддерживаемых сообществом, выполнив поиск на npm.
Сервер Parse позволяет разработчикам выбирать из нескольких вариантов при размещении файлов:
GridFSBucketAdapter
, который поддерживается MongoDB;S3Adapter
, который поддерживается Amazon S3;GCSAdapter
, который поддерживается Google Cloud Storage;FSAdapter
— локальное хранилище файлов.GridFSBucketAdapter
используется по умолчанию и не требует настройки, но если вы хотите использовать Amazon S3, Google Cloud Storage или локальное хранилище файлов, дополнительную информацию о конфигурации можно найти в руководстве Parse Server.
Внимание, это экспериментальная функция, которая может не подходить для производственной среды.
Эта функция дедуплицирует идентичные запросы, которые несколько раз поступают на сервер Parse, обычно из-за проблем с сетью или ограничений доступа сетевого адаптера на мобильных операционных системах.
Идентичные запросы определяются по их заголовку запроса X-Parse-Request-Id
. Поэтому клиентский запрос должен включать этот заголовок, чтобы применялась дедупликация. Запросы, не содержащие этот заголовок, не могут быть дедуплицированы и обрабатываются сервером Parse обычным образом. Это означает, что развёртывание этой функции на клиентах происходит незаметно, поскольку сервер 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>` | `[]` | `.*` (все пути, включая примеры ниже), <br>`functions/.*` (все функции), <br>`jobs/.*` (все задания), <br>`classes/.*` (все классы), <br>`functions/.*` (все функции), <br>`users` (создание / обновление пользователя), <br>`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`. **Постгрес**
Чтобы использовать эту функцию в Постгресе, вам нужно создать задание cron с помощью [pgAdmin](https://www.pgadmin.org/docs/pgadmin4/development/pgagent_jobs.html) или аналогичного инструмента для вызова функции Postgres `idempotency_delete_expired_records()`, которая удаляет устаревшие записи идемпотентности. Вы можете найти пример сценария ниже. Убедитесь, что сценарий имеет те же привилегии для входа в Постгрес, что и Parse Server.
```bash
#!/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, // Включает экспериментальную функцию; требуется для локализации,
enableLocalization: true,
}
}
Локализация достигается путём сопоставления параметра запроса locale
с локализованным содержимым страницы. Параметр locale
может быть предоставлен в запросе, теле или заголовке со следующими ключами:
locale
;locale
;x-parse-page-param-locale
.Например, ссылка для сброса пароля с параметром 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/ // базовый путь к страницам
│ ├── example.html // файл по умолчанию
│ └── de/ // папка языка de
│ │ └── example.html // файл, локализованный для de
│ └── de-AT/ // папка локали de-AT
│ │ └── example.html // файл, локализованный для de-AT
Файлы сопоставляются с локалью в следующем порядке:
de-AT
соответствует файлу в папке de-AT
.de-CH
соответствует файлу в папке de
.Пример конфигурации:
const api = new ParseServer({
...otherOptions,
pages: {
enableRouter: true, // включает экспериментальную функцию; требуется для локализации,
enableLocalization: true,
customUrls: {
passwordReset: 'https://example.com/page.html'
}
}
}
Плюсы:
Минусы:
Страницы локализуются путём добавления заполнителей в файлы HTML и предоставления ресурса JSON, содержащего переводы для заполнения заполнителей.
Пример структуры каталогов:
root/
├── public/ // базовый путь к страницам
│ ├── example.html // страница, содержащая заполнители
├── private/ // папка вне области public
│ └── translations.json // JSON | Да | Объект | {} | {passwordReset: 'https://example.com/page.html'} | PARSE_SERVER_PAGES_CUSTOM_URLS | URL-адреса пользовательских страниц |
| --- | ------- | -------- | ----------------------------------------- | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| pages.customUrls.passwordReset | Да | Строка | password_reset.html | — | PARSE_SERVER_PAGES_CUSTOM_URL_PASSWORD_RESET | URL пользовательской страницы для сброса пароля |
| pages.customUrls.passwordResetSuccess | Да | Строка | password_reset_success.html | — | PARSE_SERVER_PAGES_CUSTOM_URL_PASSWORD_RESET_SUCCESS | URL пользовательской страницы успеха после сброса пароля |
| pages.customUrls.passwordResetLinkInvalid | Да | Строка | password_reset_link_invalid.html | — | PARSE_SERVER_PAGES_CUSTOM_URL_PASSWORD_RESET_LINK_INVALID | URL пользовательской страницы при недействительной ссылке для сброса пароля |
| pages.customUrls.emailVerificationSuccess | Да | Строка | email_verification_success.html | — | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_SUCCESS | URL пользовательской страницы после успешной верификации по электронной почте |
| pages.customUrls.emailVerificationSendFail | Да | Строка | email_verification_send_fail.html | — | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_SEND_FAIL | URL пользовательской страницы в случае сбоя отправки ссылки для верификации по электронной почте |
| pages.customUrls.emailVerificationSendSuccess | Да | Строка | email_verification_send_success.html | — | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_SEND_SUCCESS | URL пользовательской страницы в случае успешной повторной отправки ссылки для верификации по электронной почте |
| pages.customUrls.emailVerificationLinkInvalid | Да | Строка | email_verification_link_invalid.html | — | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_LINK_INVALID | URL пользовательской страницы при недействительной ссылке верификации по электронной почте |
| pages.customUrls.emailVerificationLinkExpired | Да | Строка | email_verification_link_expired.html | — | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_LINK_EXPIRED | URL пользовательской страницы при просроченной ссылке верификации по электронной почте. | **ИСПОЛЬЗОВАНИЕ PARSE-SERVER С EXPRESS.JS**
После запуска сервера вы можете посетить http://localhost:1337/playground в браузере, чтобы начать работу с GraphQL API.
*Примечание:* Не используйте опцию --mountPlayground в рабочей среде. Parse Dashboard имеет встроенную игровую площадку GraphQL и является рекомендуемым вариантом для производственных приложений.
### Использование Express.js
Вы также можете подключить GraphQL API в приложении Express.js вместе с REST API или отдельно. Сначала необходимо создать новый проект и установить необходимые зависимости:
```bash
$ 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); // (Необязательно) Монтирует REST API
parseGraphQLServer.applyGraphQL(app); // Монтирует GraphQL API
parseGraphQLServer.applyPlayground(app); // (Необязательно) Монтирует игровую площадку GraphQL — не использовать в рабочей среде
await parseServer.start();
app.listen(1337, function() {
console.log('REST API работает на http://localhost:1337/parse');
console.log('GraphQL API работает на http://localhost:1337/graphql');
console.log('Игровая площадка GraphQL работает на http://localhost:1337/playground');
});
И, наконец, запустите приложение:
$ npx mongodb-runner start
$ node index.js
После запуска приложения вы можете посетить http://localhost:1337/playground в вашем браузере, чтобы начать работать с вашим GraphQL API.
Примечание: Не монтируйте игровую площадку GraphQL в рабочей среде. Parse Dashboard имеет встроенную игровую площадку 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` в вашей схеме. Теперь вы можете начать использовать автоматически сгенерированные операции!
Выполните следующее, чтобы создать свой первый объект:
```graphql
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
}
]
}
}
}
## Настройка вашей схемы GraphQL
Parse GraphQL Server позволяет вам создать пользовательскую схему GraphQL с собственными запросами и мутациями, которые будут объединены с автоматически сгенерированными. Вы можете разрешить эти операции, используя свои обычные функции облачного кода.
Чтобы начать создавать свою пользовательскую схему, вам нужно написать файл `schema.graphql` и инициализировать Parse Server с параметрами `--graphQLSchema` и `--cloud`:
```bash
$ 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 Server.
# 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 — это очень хороший источник для изучения того, как использовать API Parse GraphQL.
У вас также есть очень мощный инструмент внутри вашей GraphQL Playground. Пожалуйста, посмотрите на правую сторону вашей GraphQL Playground. Вы увидите меню DOCS
и SCHEMA
, которые автоматически генерируются путём анализа схемы вашего приложения. Пожалуйста, обратитесь к ним и узнайте больше обо всём, что можно сделать с помощью вашего Parse GraphQL API.
Кроме того, раздел обучения GraphQL является очень хорошим источником для более глубокого изучения возможностей языка GraphQL.
Пожалуйста, ознакомьтесь с Руководством по внесению вклада.
Этот проект существует благодаря всем людям, которые вносят свой вклад... мы хотели бы видеть ваше лицо в этом списке!
Поддержите этот проект, став спонсором. Ваш логотип будет отображаться здесь со ссылкой на ваш веб-сайт. Станьте спонсором!
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )