



Parse Server adalah backend open source yang dapat digunakan untuk infrastruktur apa pun yang dapat menjalankan Node.js. Parse Server bekerja dengan kerangka aplikasi Web Express. Ini dapat ditambahkan ke aplikasi web yang ada, atau dijalankan dengan sendirinya.
Dokumentasi lengkap untuk Parse Server tersedia di wiki. Panduan server Parse adalah tempat yang baik untuk memulai. Referensi API dan panduan kode cloud juga tersedia. Jika Anda tertarik untuk mengembangkan Parse Server, panduan pengembangan akan membantu Anda diatur.
Terima kasih banyak kepada sponsor dan pendukung kami yang mendukung pengembangan platform parse!
Server Parse tersedia dalam berbagai rasa di berbagai cabang:
release-<version>.xx , misalnya release-5.xx . Cabang LTS tidak memiliki cabang pra-rilis. Dukungan jangka panjang (LTS) disediakan untuk versi utama server parse sebelumnya. Misalnya, Parse Server 5.x akan menerima pembaruan keamanan sampai Parse Server 6.X digantikan oleh Parse Server 7.x dan menjadi versi LTS baru. Sementara versi utama saat ini diterbitkan pada release cabang, versi LTS diterbitkan pada release-#.xx , misalnya release-5.xx untuk cabang Parse Server 5.x LTS.
Cara tercepat dan termudah untuk memulai adalah dengan menjalankan server MongoDB dan Parse secara lokal.
Sebelum Anda mulai pastikan Anda telah menginstal:
npmParse Server terus diuji dengan rilis Node.js terbaru untuk memastikan kompatibilitas. Kami mengikuti rencana dukungan jangka panjang Node.js dan hanya menguji terhadap versi yang secara resmi didukung dan belum mencapai tanggal akhir kehidupan mereka.
| Versi | Versi Terbaru | Akhir Kehidupan | Kompatibel |
|---|---|---|---|
| Node.js 18 | 18.20.4 | April 2025 | ✅ Ya |
| Node.js 20 | 20.15.1 | April 2026 | ✅ Ya |
| Node.js 22 | 22.4.1 | April 2027 | ✅ Ya |
Parse Server terus diuji dengan rilis MongoDB terbaru untuk memastikan kompatibilitas. Kami mengikuti jadwal dukungan MongoDB dan jadwal siklus hidup MongoDB dan hanya menguji terhadap versi yang secara resmi didukung dan belum mencapai tanggal akhir kehidupan mereka. MongoDB "Rilis Cepat" diabaikan karena ini dianggap sebagai pra-rilis dari versi utama berikutnya.
| Versi | Versi Terbaru | Akhir Kehidupan | Kompatibel |
|---|---|---|---|
| MongoDB 4.2 | 4.2.25 | April 2023 | ✅ Ya |
| MongoDB 4.4 | 4.4.29 | Februari 2024 | ✅ Ya |
| MongoDB 5 | 5.0.26 | Oktober 2024 | ✅ Ya |
| MongoDB 6 | 6.0.14 | Juli 2025 | ✅ Ya |
| MongoDB 7 | 7.0.8 | Tdb | ✅ Ya |
| MongoDB 8 | 8.0.0 | Tdb | ✅ Ya |
Parse Server terus diuji dengan rilis terbaru dari PostgreSQL dan PostGIS untuk memastikan kompatibilitas, menggunakan gambar PostGIS Docker. Kami mengikuti jadwal dukungan PostgreSQL dan jadwal dukungan postgis dan hanya menguji terhadap versi yang secara resmi didukung dan belum mencapai tanggal akhir kehidupan mereka. Karena durasi dukungan PostgreSQL yang luas 5 tahun, Parse Server menjatuhkan dukungan sekitar 2 tahun sebelum tanggal akhir kehidupan resmi.
| Versi | Versi postgis | Akhir Kehidupan | Dukungan server parse | Kompatibel |
|---|---|---|---|---|
| Postgres 13 | 3.1, 3.2, 3.3, 3.4, 3.5 | November 2025 | <= 6.x (2023) | ✅ Ya |
| Postgres 14 | 3.5 | November 2026 | <= 7.x (2024) | ✅ Ya |
| Postgres 15 | 3.5 | November 2027 | <= 8.x (2025) | ✅ Ya |
| Postgres 16 | 3.5 | November 2028 | <= 9.x (2026) | ✅ Ya |
| Postgres 17 | 3.5 | November 2029 | <= 9.x (2026) | ✅ Ya |
$ npm install -g parse-server mongodb-runner
$ mongodb-runner start
$ parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://localhost/test Catatan: Jika instalasi dengan -g gagal karena masalah izin ( npm ERR! code 'EACCES' ), silakan merujuk ke tautan ini.
$ 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 Catatan: Jika Anda ingin menggunakan kode cloud, tambahkan -v cloud-code-vol:/parse-server/cloud --cloud /parse-server/cloud/main.js ke perintah di atas. Pastikan main.js ada di direktori cloud-code-vol sebelum memulai server parse.
Anda dapat menggunakan string sewenang -wenang sebagai ID aplikasi dan kunci master Anda. Ini akan digunakan oleh klien Anda untuk mengotentikasi dengan server Parse.
Itu saja! Anda sekarang menjalankan versi mandiri dari server parse di mesin Anda.
Menggunakan MongoDB jarak jauh? Lulus parameter --databaseURI DATABASE_URI saat memulai parse-server . Pelajari lebih lanjut tentang mengonfigurasi server parse di sini. Untuk daftar lengkap opsi yang tersedia, jalankan parse-server --help .
Sekarang setelah Anda menjalankan Parse Server, sekarang saatnya untuk menyimpan objek pertama Anda. Kami akan menggunakan API REST, tetapi Anda dapat dengan mudah melakukan hal yang sama menggunakan SDK Parse. Jalankan berikut:
$ 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/GameScoreAnda harus mendapatkan tanggapan yang mirip dengan ini:
{
"objectId" : "2ntvSpRGIK" ,
"createdAt" : "2016-03-11T23:51:48.050Z"
} Anda sekarang dapat mengambil objek ini secara langsung (pastikan untuk mengganti 2ntvSpRGIK dengan objectId sebenarnya yang Anda terima saat objek dibuat):
$ 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 "
}Namun, melacak ID objek individu tidak ideal. Dalam kebanyakan kasus, Anda ingin menjalankan kueri atas koleksi, seperti itu:
$ 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 "
}
]
}Untuk mempelajari lebih lanjut tentang menggunakan objek menyimpan dan meminta di server parse, lihat dokumentasi parse.
Parse menyediakan SDK untuk semua platform utama. Lihat Panduan Server Parse untuk mempelajari cara menghubungkan aplikasi Anda ke Parse Server.
Setelah Anda memiliki pemahaman yang lebih baik tentang cara kerja proyek, silakan merujuk ke wiki server parse untuk pemandu mendalam untuk menggunakan server parse ke penyedia infrastruktur utama. Baca terus untuk mempelajari lebih lanjut tentang cara tambahan menjalankan server parse.
Kami telah menyediakan aplikasi dasar node.js yang menggunakan modul server parse di Express dan dapat dengan mudah digunakan ke berbagai penyedia infrastruktur:
Anda juga dapat membuat instance dari server parse, dan memasangnya di situs web Express yang baru atau yang sudah ada:
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.' ) ;
} ) ; Untuk daftar lengkap opsi yang tersedia, jalankan parse-server --help atau lihat [Parse Server Configurations] [server-options].
Periksa Parse Server Health dengan mengirimkan permintaan ke titik akhir /parse/health .
Responsnya terlihat seperti ini:
{
"status" : " ok "
}| Nilai | Keterangan |
|---|---|
initialized | Server telah dibuat tetapi metode start belum dipanggil. |
starting | Server mulai. |
ok | Server dimulai dan sedang berjalan. |
error | Ada kesalahan startup, lihat log untuk detailnya. |
Parse Server dapat dikonfigurasi menggunakan opsi berikut. Anda dapat meneruskan ini sebagai parameter saat menjalankan parse-server mandiri, atau dengan memuat file konfigurasi dalam format JSON menggunakan parse-server path/to/configuration.json . Jika Anda menggunakan Parse Server di Express, Anda juga dapat meneruskannya ke objek ParseServer sebagai opsi.
Untuk daftar lengkap opsi yang tersedia, jalankan parse-server --help atau lihat [Parse Server Configurations] [server-options].
appId (wajib) - ID aplikasi untuk di -host dengan instance server ini. Anda dapat menggunakan string sewenang -wenang apa pun. Untuk aplikasi yang dimigrasi, ini harus cocok dengan aplikasi Parse yang Anda hosting.masterKey (wajib) - Kunci master untuk digunakan untuk mengesampingkan keamanan ACL. Anda dapat menggunakan string sewenang -wenang apa pun. Rahasia! Untuk aplikasi yang dimigrasi, ini harus cocok dengan aplikasi Parse yang Anda hosting.databaseURI (Diperlukan) - String koneksi untuk database Anda, yaitu mongodb://user:[email protected]/dbname . Pastikan URL menyandikan kata sandi Anda jika kata sandi Anda memiliki karakter khusus.port - Port default adalah 1337, tentukan parameter ini untuk menggunakan port yang berbeda.serverURL - URL ke server parse Anda (jangan lupa untuk menentukan http: // atau https: //). URL ini akan digunakan saat membuat permintaan untuk parse server dari kode cloud.cloud - Jalur absolut ke file cloud code main.js Anda.push - Opsi konfigurasi untuk APN dan GCM PUSH. Lihat pemberitahuan Push Start cepat. Kunci klien yang digunakan dengan parse tidak lagi diperlukan dengan server parse. Jika Anda masih ingin memerlukannya, mungkin untuk dapat menolak akses ke klien yang lebih tua, Anda dapat mengatur kunci pada waktu inisialisasi. Mengatur salah satu dari tombol ini akan membutuhkan semua permintaan untuk memberikan salah satu tombol yang dikonfigurasi.
clientKeyjavascriptKeyrestAPIKeydotNetKey| Cakupan | Data internal | Data baca saja (1) | Data khusus | Dibatasi oleh CLP, ACL | Kunci |
|---|---|---|---|---|---|
| Intern | r/w | r/w | r/w | TIDAK | maintenanceKey |
| Menguasai | -/-- | R/- | r/w | TIDAK | masterKey |
| Readonlymaster | -/-- | R/- | R/- | TIDAK | readOnlyMasterKey |
| Sidang | -/-- | R/- | r/w | Ya | sessionToken |
(1) Parse.Object.createdAt , Parse.Object.updatedAt .
Memverifikasi alamat email pengguna dan mengaktifkan reset kata sandi melalui email memerlukan adaptor email. Ada banyak adaptor email yang disediakan dan dikelola oleh masyarakat. Berikut ini adalah contoh konfigurasi dengan contoh adaptor email. Lihat [Parse Server Options] [Server-Options] untuk detail lebih lanjut dan daftar lengkap opsi yang tersedia.
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
}
} ,
} ) ;Adaptor email resmi dikelola oleh Parse Platform:
Adaptor email disumbangkan oleh komunitas:
Tetapkan Kata Sandi dan Kebijakan Akun yang memenuhi persyaratan keamanan Anda. Berikut ini adalah contoh konfigurasi. Lihat [Parse Server Options] [Server-Options] untuk detail lebih lanjut dan daftar lengkap opsi yang tersedia.
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 ,
} ,
} ) ; Perhatian, ini adalah fitur eksperimental yang mungkin tidak sesuai untuk produksi.
Rute khusus memungkinkan untuk membangun aliran pengguna dengan halaman web, mirip dengan reset kata sandi dan fitur verifikasi email yang ada. Rute khusus didefinisikan dengan opsi pages dalam konfigurasi server 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' } ;
}
} ]
}
} Rute di atas dapat dipanggil dengan mengirimkan permintaan GET ke: https://[parseServerPublicUrl]/[parseMount]/[pagesEndpoint]/[appId]/[customRoute]
handler menerima request dan mengembalikan halaman web custom_page.html dari Direktori pages.pagesPath . Keuntungan membangun rute khusus dengan cara ini adalah secara otomatis memanfaatkan kemampuan bawaan server Parse, seperti pelokalan halaman dan placeholder dinamis.
Jalur berikut sudah digunakan oleh fitur bawaan server Parse dan karenanya tidak tersedia untuk rute khusus. Rute khusus dengan kombinasi path dan method yang identik diabaikan.
| Jalur | Metode HTTP | Fitur |
|---|---|---|
verify_email | GET | Verifikasi Email |
resend_verification_email | POST | Verifikasi Email |
choose_password | GET | Reset Kata Sandi |
request_password_reset | GET | Reset Kata Sandi |
request_password_reset | POST | Reset Kata Sandi |
| Parameter | Opsional | Jenis | Nilai default | Nilai contoh | Variabel Lingkungan | Keterangan |
|---|---|---|---|---|---|---|
pages | Ya | Object | undefined | - | PARSE_SERVER_PAGES | Opsi untuk halaman seperti reset kata sandi dan verifikasi email. |
pages.enableRouter | Ya | Boolean | false | - | PARSE_SERVER_PAGES_ENABLE_ROUTER | true jika router halaman harus diaktifkan; Ini diperlukan untuk salah satu opsi halaman untuk berlaku. Perhatian, ini adalah fitur eksperimental yang mungkin tidak sesuai untuk produksi. |
pages.customRoutes | Ya | Array | [] | - | PARSE_SERVER_PAGES_CUSTOM_ROUTES | Rute khusus. Rute ditambahkan dalam urutan yang didefinisikan di sini, yang harus dipertimbangkan karena permintaan melintasi rute dengan cara yang dipesan. Rute khusus dilintasi setelah rute build-in seperti reset kata sandi dan verifikasi email. |
pages.customRoutes.method | String | - | GET , POST | - | Metode HTTP dari rute khusus. | |
pages.customRoutes.path | String | - | custom_page | - | Jalur rute khusus. Perhatikan bahwa jalur yang sama dapat digunakan jika method ini berbeda, misalnya jalur custom_page dapat memiliki dua rute, rute GET and POST , yang akan dipanggil tergantung pada metode permintaan http. | |
pages.customRoutes.handler | AsyncFunction | - | async () => { ... } | - | Penangan rute yang dipanggil ketika rute cocok dengan permintaan HTTP. Jika pawang tidak mengembalikan halaman, permintaan dijawab dengan 404 Not found. tanggapan. |
Dimungkinkan untuk mengubah halaman default aplikasi dan mengarahkan kembali pengguna ke jalur atau domain lain.
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"
}
} ) Anda dapat mengonfigurasi server parse menggunakan variabel lingkungan:
PORT
PARSE_SERVER_APPLICATION_ID
PARSE_SERVER_MASTER_KEY
PARSE_SERVER_DATABASE_URI
PARSE_SERVER_URL
PARSE_SERVER_CLOUDPort default adalah 1337, untuk menggunakan port yang berbeda mengatur variabel lingkungan port:
$ PORT=8080 parse-server --appId APPLICATION_ID --masterKey MASTER_KEY Untuk daftar lengkap variabel lingkungan yang dapat dikonfigurasi, jalankan parse-server --help atau lihat konfigurasi server parse.
Semua adaptor resmi didistribusikan sebagai paket scoped di NPM (@parse).
Beberapa adaptor yang dipelihara dengan baik juga tersedia di organisasi Modul Server Parse.
Anda juga dapat menemukan lebih banyak adaptor yang dikelola oleh komunitas dengan mencari di NPM.
Parse Server memungkinkan pengembang untuk memilih dari beberapa opsi saat hosting file:
GridFSBucketAdapter - yang didukung oleh MongoDBS3Adapter - yang didukung oleh Amazon S3GCSAdapter - yang didukung oleh Google Cloud StorageFSAdapter - Penyimpanan File Lokal GridFSBucketAdapter digunakan secara default dan tidak memerlukan pengaturan, tetapi jika Anda tertarik untuk menggunakan Amazon S3, Google Cloud Storage, atau penyimpanan file lokal, informasi konfigurasi tambahan tersedia di Panduan Server Parse.
Perhatian, ini adalah fitur eksperimental yang mungkin tidak sesuai untuk produksi.
Fitur ini deduplikat permintaan identik yang diterima oleh Parse Server beberapa kali, biasanya karena masalah jaringan atau pembatasan akses adaptor jaringan pada sistem operasi seluler.
Permintaan yang identik diidentifikasi oleh header permintaan mereka X-Parse-Request-Id . Oleh karena itu permintaan klien harus memasukkan header ini agar deduplikasi diterapkan. Permintaan yang tidak mengandung header ini tidak dapat diuplikasi dan diproses secara normal oleh server parse. Ini berarti meluncurkan fitur ini ke klien mulus karena Parse Server masih memproses permintaan tanpa header ini ketika fitur ini diaktifkan.
Fitur ini perlu diaktifkan di sisi klien untuk mengirim header dan di server untuk memproses header. Lihat dokumen Parse SDK spesifik untuk melihat apakah fitur tersebut sudah didukung.
Deduplikasi hanya dilakukan untuk pembuatan dan pembaruan objek ( POST dan PUT permintaan). Deduplikasi tidak dilakukan untuk penemuan dan penghapusan objek ( GET dan DELETE permintaan), karena operasi ini sudah idempoten menurut definisi.
let api = new ParseServer({
idempotencyOptions: {
paths: [".*"], // enforce for all requests
ttl: 120 // keep request IDs for 120s
}
}
| Parameter | Opsional | Jenis | Nilai default | Nilai contoh | Variabel Lingkungan | Keterangan |
|---|---|---|---|---|---|---|
idempotencyOptions | Ya | Object | undefined | Parse_server_experimental_idempotency_options | Mengatur ini memungkinkan penegakan idempotensi untuk jalur yang ditentukan. | |
idempotencyOptions.paths | Ya | Array<String> | [] | .* (Semua jalur, termasuk contoh di bawah),functions/.* (semua fungsi),jobs/.* (semua pekerjaan),classes/.* (semua kelas),functions/.* (semua fungsi),users (Pembuatan / Pembaruan Pengguna),installations (pembuatan / pembaruan instalasi) | Parse_server_experimental_idempotency_paths | Sejumlah pola jalur yang harus sesuai dengan jalur permintaan untuk deduplikasi permintaan yang diaktifkan. Jalur pemasangan tidak boleh dimasukkan, misalnya untuk mencocokkan jalur permintaan /parse/functions/myFunction Tentukan functions/myFunction . Slash trailing dari jalur permintaan diabaikan, misalnya functions/myFunction cocok dengan keduanya /parse/functions/myFunction dan /parse/functions/myFunction/ . |
idempotencyOptions.ttl | Ya | Integer | 300 | 60 (60 detik) | Parse_server_experimental_idempotency_ttl | Durasi dalam hitungan detik setelah itu catatan permintaan dibuang dari database. Permintaan duplikat karena masalah jaringan dapat diharapkan tiba dalam milidetik hingga beberapa detik. Nilai ini harus lebih besar dari 0 . |
Untuk menggunakan fitur ini di Postgres, Anda perlu membuat pekerjaan cron menggunakan pgadmin atau serupa untuk memanggil fungsi postgres idempotency_delete_expired_records() yang menghapus catatan idempotensi yang kadaluwarsa. Anda dapat menemukan contoh skrip di bawah ini. Pastikan skrip memiliki hak istimewa yang sama untuk masuk ke Postgres sebagai server 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 " $@ " Dengan asumsi skrip di atas dinamai, parse_idempotency_delete_expired_records.sh , pekerjaan cron yang menjalankan skrip setiap 2 menit mungkin terlihat seperti:
2 * * * * /root/parse_idempotency_delete_expired_records.sh > /dev/null 2>&1 Perhatian, ini adalah fitur eksperimental yang mungkin tidak sesuai untuk produksi.
Halaman khusus serta halaman fitur (mis. Reset kata sandi, verifikasi email) dapat dilokalisasi dengan opsi pages dalam konfigurasi server parse:
const api = new ParseServer ( {
... otherOptions ,
pages : {
enableRouter : true , // Enables the experimental feature; required for localization
enableLocalization : true ,
}
} Lokalisasi dicapai dengan mencocokkan parameter locale yang disediakan permintaan dengan konten halaman terlokalisasi. Lokal dapat disediakan dalam permintaan, tubuh atau header permintaan dengan kunci berikut:
localelocalex-parse-page-param-localeMisalnya, tautan reset kata sandi dengan parameter lokal dalam kueri bisa terlihat seperti ini:
http://example.com/parse/apps/[appId]/request_password_reset?token=[token]&username=[username]&locale=de-AT
pages.pagesPath .pages.customUrls ..html yang dipertimbangkan untuk lokalisasi saat melokalisasi halaman khusus.Halaman dapat dilokalisasi dalam dua cara:
Halaman dilokalisasi dengan menggunakan file yang sesuai dalam struktur direktori di mana file ditempatkan di subdirektori yang dinamai berdasarkan lokal atau bahasa. File di direktori dasar adalah file default.
Contoh Struktur Direktori:
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 fileFile dicocokkan dengan lokal dalam urutan berikut:
de-AT mencocokkan file di folder de-AT .de-CH mencocokkan file di folder de .Contoh Konfigurasi:
const api = new ParseServer ( {
... otherOptions ,
pages : {
enableRouter : true , // Enables the experimental feature; required for localization
enableLocalization : true ,
customUrls : {
passwordReset : 'https://example.com/page.html'
}
}
}Pro:
Kontra:
Halaman dilokalisasi dengan menambahkan placeholder dalam file HTML dan menyediakan sumber daya JSON yang berisi terjemahan untuk diisi ke placeholder.
Contoh Struktur Direktori:
root /
├── public / // pages base path
│ ├── example . html // the page containing placeholders
├── private / // folder outside of public scope
│ └── translations . json // JSON resource fileFile sumber daya JSON secara longgar mengikuti sintaks i18Next, yang merupakan sintaks yang sering didukung oleh platform terjemahan, membuatnya mudah untuk mengelola terjemahan, mengekspornya untuk digunakan di server parse, dan bahkan untuk mengotomatiskan alur kerja ini.
Contoh konten 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! "
}
}
}Contoh Konfigurasi:
const api = new ParseServer ( {
... otherOptions ,
pages : {
enableRouter : true , // Enables the experimental feature; required for localization
enableLocalization : true ,
localizationJsonPath : './private/localization.json' ,
localizationFallbackLocale : 'en'
}
}Pro:
Kontra:
Selain parameter default terkait fitur seperti appId dan terjemahan yang disediakan melalui JSON Resource, dimungkinkan untuk mendefinisikan placeholder dinamis khusus sebagai bagian dari konfigurasi router. Ini bekerja secara independen dari lokalisasi dan, juga jika enableLocalization dinonaktifkan.
Contoh Konfigurasi:
const api = new ParseServer ( {
... otherOptions ,
pages : {
enableRouter : true , // Enables the experimental feature; required for localization
placeholders : {
exampleKey : 'exampleValue'
}
}
} Placeholder juga dapat disediakan sebagai fungsi atau sebagai fungsi async, dengan locale dan parameter terkait fitur lainnya dilewati, untuk memungkinkan nilai placeholder dinamis:
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
} ;
}
}
} Parameter berikut dan kunci placeholder dicadangkan karena digunakan terkait dengan fitur seperti reset kata sandi atau verifikasi email. Mereka tidak boleh digunakan sebagai kunci terjemahan dalam sumber daya JSON atau sebagai kunci placeholder yang didefinisikan secara manual dalam konfigurasi: appId , appName , email , error , locale , publicServerUrl , token , username .
| Parameter | Opsional | Jenis | Nilai default | Nilai contoh | Variabel Lingkungan | Keterangan |
|---|---|---|---|---|---|---|
pages | Ya | Object | undefined | - | PARSE_SERVER_PAGES | Opsi untuk halaman seperti reset kata sandi dan verifikasi email. |
pages.enableRouter | Ya | Boolean | false | - | PARSE_SERVER_PAGES_ENABLE_ROUTER | true jika router halaman harus diaktifkan; Ini diperlukan untuk salah satu opsi halaman untuk berlaku. Perhatian, ini adalah fitur eksperimental yang mungkin tidak sesuai untuk produksi. |
pages.enableLocalization | Ya | Boolean | false | - | PARSE_SERVER_PAGES_ENABLE_LOCALIZATION | Benar jika halaman harus dilokalisasi; Ini tidak berpengaruh pada pengalihan halaman khusus. |
pages.localizationJsonPath | Ya | String | undefined | ./private/translations.json | PARSE_SERVER_PAGES_LOCALIZATION_JSON_PATH | Jalur ke file JSON untuk lokalisasi; Terjemahan akan digunakan untuk mengisi placeholder template sesuai dengan lokal. |
pages.localizationFallbackLocale | Ya | String | en | en , en-GB , default | PARSE_SERVER_PAGES_LOCALIZATION_FALLBACK_LOCALE | Lokal Fallback untuk lokalisasi jika tidak ada terjemahan yang cocok disediakan untuk lokal yang diberikan. Ini hanya relevan saat menyediakan sumber daya terjemahan melalui file JSON. |
pages.placeholders | Ya | Object , Function , AsyncFunction | undefined | { exampleKey: 'exampleValue' } | PARSE_SERVER_PAGES_PLACEHOLDERS | Kunci dan nilai -nilai placeholder yang akan diisi di halaman; Ini bisa menjadi objek sederhana atau fungsi panggilan balik. |
pages.forceRedirect | Ya | Boolean | false | - | PARSE_SERVER_PAGES_FORCE_REDIRECT | true jika respons harus selalu diarahkan kembali dan tidak pernah konten, false jika jenis respons harus tergantung pada jenis permintaan ( GET permintaan -> respons konten; POST permintaan -> respons pengalihan). |
pages.pagesPath | Ya | String | ./public | ./files/pages , ../../pages | PARSE_SERVER_PAGES_PAGES_PATH | Jalan ke direktori halaman; Ini juga mendefinisikan di mana titik akhir /apps statis menunjuk ke. |
pages.pagesEndpoint | Ya | String | apps | - | PARSE_SERVER_PAGES_PAGES_ENDPOINT | Titik akhir API untuk halaman. |
pages.customUrls | Ya | Object | {} | { passwordReset: 'https://example.com/page.html' } | PARSE_SERVER_PAGES_CUSTOM_URLS | URL ke halaman khusus |
pages.customUrls.passwordReset | Ya | String | password_reset.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_PASSWORD_RESET | URL ke halaman khusus untuk reset kata sandi. |
pages.customUrls.passwordResetSuccess | Ya | String | password_reset_success.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_PASSWORD_RESET_SUCCESS | URL ke halaman khusus untuk reset kata sandi -> Sukses. |
pages.customUrls.passwordResetLinkInvalid | Ya | String | password_reset_link_invalid.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_PASSWORD_RESET_LINK_INVALID | URL ke halaman khusus untuk reset kata sandi -> tautan tidak valid. |
pages.customUrls.emailVerificationSuccess | Ya | String | email_verification_success.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_SUCCESS | URL ke halaman khusus untuk verifikasi email -> sukses. |
pages.customUrls.emailVerificationSendFail | Ya | String | email_verification_send_fail.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_SEND_FAIL | URL ke halaman khusus untuk verifikasi email -> tautan Kirim gagal. |
pages.customUrls.emailVerificationSendSuccess | Ya | String | email_verification_send_success.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_SEND_SUCCESS | URL ke halaman kustom untuk verifikasi email -> RESED LINK -> SUCCESS. |
pages.customUrls.emailVerificationLinkInvalid | Ya | String | email_verification_link_invalid.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_LINK_INVALID | URL ke halaman khusus untuk verifikasi email -> tautan tidak valid. |
pages.customUrls.emailVerificationLinkExpired | Ya | String | email_verification_link_expired.html | - | PARSE_SERVER_PAGES_CUSTOM_URL_EMAIL_VERIFICATION_LINK_EXPIRED | URL ke halaman khusus untuk verifikasi email -> tautan kedaluwarsa. |
Parse Server akan, secara default, log:
Log juga dapat dilihat di dasbor parse.
Ingin mencatat setiap permintaan dan tanggapan? Atur variabel lingkungan VERBOSE saat memulai parse-server . Penggunaan: VERBOSE='1' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY
Ingin log ditempatkan di folder yang berbeda? Lulus variabel lingkungan PARSE_SERVER_LOGS_FOLDER saat memulai parse-server . Penggunaan: PARSE_SERVER_LOGS_FOLDER='<path-to-logs-folder>' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY
Ingin mencatat level tertentu? Lewati parameter logLevel saat memulai parse-server . Penggunaan: parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --logLevel LOG_LEVEL
Ingin Baris Baru Delimited JSON Error Logs (untuk Konsumsi oleh CloudWatch, Google Cloud Logging, dll)? Lulus variabel lingkungan JSON_LOGS saat memulai parse-server . Penggunaan: JSON_LOGS='1' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY
Lihat rencana penghentian untuk tinjauan umum tentang penyusutan dan merencanakan perubahan.
Kueri langsung dimaksudkan untuk digunakan dalam aplikasi reaktif real-time, di mana hanya menggunakan paradigma kueri tradisional dapat menyebabkan beberapa masalah, seperti peningkatan waktu respons dan penggunaan jaringan dan server yang tinggi. Kueri langsung harus digunakan dalam kasus-kasus di mana Anda perlu terus memperbarui halaman dengan data baru yang berasal dari database, yang sering terjadi dalam (tetapi tidak terbatas pada) game online, klien pesan dan daftar yang harus dilakukan bersama.
Lihatlah panduan permintaan langsung, panduan pengaturan server kueri langsung dan spesifikasi protokol kueri langsung. Anda dapat mengatur server mandiri atau beberapa instance untuk skalabilitas (disarankan).
GraphQL, yang dikembangkan oleh Facebook, adalah kueri data sumber terbuka dan bahasa manipulasi untuk API. Selain API REST tradisional, Parse Server secara otomatis menghasilkan API GraphQL berdasarkan skema aplikasi Anda saat ini. Parse Server juga memungkinkan Anda untuk menentukan kueri dan mutasi graphql khusus Anda, yang resolvernya dapat terikat pada fungsi kode cloud Anda.
Cara termudah untuk menjalankan Parse GraphQL API adalah melalui 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 --mountPlaygroundSetelah memulai server, Anda dapat mengunjungi http: // localhost: 1337/Playground di browser Anda untuk mulai bermain dengan graphql API Anda.
CATATAN: Jangan gunakan opsi ---Mountplayround dalam produksi. Parse Dashboard memiliki taman bermain GraphQL bawaan dan ini adalah opsi yang disarankan untuk aplikasi produksi.
Anda juga dapat menjalankan Parse GraphQL API di dalam wadah 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 Catatan: Jika Anda ingin menggunakan kode cloud, tambahkan -v cloud-code-vol:/parse-server/cloud --cloud /parse-server/cloud/main.js ke perintah di atas. Pastikan main.js ada di direktori cloud-code-vol sebelum memulai server parse.
Setelah memulai server, Anda dapat mengunjungi http: // localhost: 1337/Playground di browser Anda untuk mulai bermain dengan graphql API Anda.
CATATAN: Jangan gunakan opsi ---Mountplayround dalam produksi. Parse Dashboard memiliki taman bermain GraphQL bawaan dan ini adalah opsi yang disarankan untuk aplikasi produksi.
Anda juga dapat memasang API GraphQL dalam aplikasi Express.js bersama dengan API atau Solo REST. Pertama -tama Anda harus membuat proyek baru dan menginstal dependensi yang diperlukan:
$ mkdir my-app
$ cd my-app
$ npm install parse-server express --save Kemudian, buat file index.js dengan konten berikut:
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' ) ;
} ) ;Dan akhirnya mulai aplikasi Anda:
$ npx mongodb-runner start
$ node index.jsSetelah memulai aplikasi, Anda dapat mengunjungi http: // localhost: 1337/Playground di browser Anda untuk mulai bermain dengan graphql API Anda.
Catatan: Jangan memasang taman bermain graphql dalam produksi. Parse Dashboard memiliki taman bermain GraphQL bawaan dan ini adalah opsi yang disarankan untuk aplikasi produksi.
Jalankan berikut:
query Health {
health
}Anda harus menerima tanggapan berikut:
{
"data" : {
"health" : true
}
} Karena aplikasi Anda belum memiliki skema apa pun, Anda dapat menggunakan mutasi createClass untuk membuat kelas pertama Anda. Jalankan berikut:
mutation CreateClass {
createClass (
name : " GameScore "
schemaFields : {
addStrings : [{ name : " playerName " }]
addNumbers : [{ name : " score " }]
addBooleans : [{ name : " cheatMode " }]
}
) {
name
schemaFields {
name
__typename
}
}
}Anda harus menerima tanggapan berikut:
{
"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 belajar dari kelas satu yang Anda buat dan sekarang Anda memiliki kelas GameScore dalam skema Anda. Anda sekarang dapat mulai menggunakan operasi yang dihasilkan secara otomatis!
Jalankan yang berikut untuk membuat objek pertama Anda:
mutation CreateGameScore {
createGameScore (
fields : {
playerName : " Sean Plott "
score : 1337
cheatMode : false
}
) {
id
updatedAt
createdAt
playerName
score
cheatMode
ACL
}
}Anda harus menerima tanggapan yang mirip dengan ini:
{
"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
}
}
}Anda juga dapat menjalankan kueri ke kelas baru ini:
query GameScores {
gameScores {
results {
id
updatedAt
createdAt
playerName
score
cheatMode
ACL
}
}
}Anda harus menerima tanggapan yang mirip dengan ini:
{
"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 memungkinkan Anda membuat skema graphql khusus dengan pertanyaan dan mutasi sendiri untuk digabungkan dengan yang dihasilkan secara otomatis. Anda dapat menyelesaikan operasi ini menggunakan fungsi kode cloud reguler Anda.
Untuk mulai membuat skema khusus Anda, Anda perlu membuat kode file schema.graphql dan menginisialisasi server parse dengan --graphQLSchema dan -opsi --cloud :
$ parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://localhost/test --publicServerURL http://localhost:1337/parse --cloud ./cloud/main.js --graphQLSchema ./cloud/schema.graphql --mountGraphQL --mountPlayground Gunakan kode di bawah ini untuk file schema.graphql dan main.js Anda. Kemudian restart server parse Anda.
# schema.graphql
extend type Query {
hello : String ! @resolve
} // main.js
Parse . Cloud . define ( 'hello' , async ( ) => {
return 'Hello world!' ;
} ) ;Anda sekarang dapat menjalankan kueri khusus Anda menggunakan GraphQL Playground:
query {
hello
}Anda harus menerima tanggapan di bawah ini:
{
"data" : {
"hello" : " Hello world! "
}
}Panduan Parse GraphQL adalah sumber yang sangat baik untuk mempelajari cara menggunakan Parse GraphQL API.
Anda juga memiliki alat yang sangat kuat di dalam taman bermain GraphQL Anda. Silakan lihat sisi kanan taman bermain GraphQL Anda. Anda akan melihat menu DOCS dan SCHEMA . Mereka secara otomatis dihasilkan dengan menganalisis skema aplikasi Anda. Silakan merujuk mereka dan pelajari lebih lanjut tentang segala sesuatu yang dapat Anda lakukan dengan Parse GraphQL API Anda.
Selain itu, bagian pembelajaran GraphQL adalah sumber yang sangat baik untuk mempelajari lebih lanjut tentang kekuatan bahasa GraphQL.
Silakan lihat panduan yang berkontribusi.
Proyek ini ada berkat semua orang yang berkontribusi ... kami ingin melihat wajah Anda di daftar ini!
Dukung proyek ini dengan menjadi sponsor. Logo Anda akan muncul di sini dengan tautan ke situs web Anda. Menjadi sponsor!
Dukung kami dengan sumbangan bulanan dan bantu kami melanjutkan kegiatan kami. Menjadi pendukung!
[Server-Options] http://parseplatform.org/parse-server/api/release/parseserveroptions.html