Advanced Guides

Cara Tingkatkan Kode Cloud dengan Parse Server 3.1

24min

Lebih banyak kekuatan untuk Aplikasi Anda dengan Parse Server 3.1

Pendahuluan

Komunitas Parse baru-baru ini merilis versi 3.1 dari Parse Server. Pembaruan ini telah membersihkan sintaks Cloud Code: jauh lebih mudah untuk memanfaatkan konstruk es6 async dan await.

Selain itu, beberapa keanehan yang terkait dengan penggunaan Parse telah dihapus, misalnya, fungsi Cloud cukup mengembalikan Promise daripada menggunakan error atau success pesan pada objek Response.

Anda dapat memperbarui aplikasi Anda di Back4App dengan mudah di Dasbor Anda. Panduan ini akan menunjukkan cara memperbarui kode Anda untuk memanfaatkan fitur baru dari 3.1.

Untuk mengikuti panduan ini, Anda dipersilakan untuk melihat proyek contoh yang disediakan.

Ini adalah tutorial tamu yang ditulis oleh John Considine, pengembang utama di K-Optional.

Tujuan

  • Untuk memperbarui Parse Server Back4App Anda ke 3.1 dan memigrasikan Cloud Code Anda sesuai.

Prasyarat

Untuk menyelesaikan tutorial ini, Anda perlu: ° Aplikasi Back4App yang sudah ada yang menggunakan Parse Server 2.x ° Ikuti tutorial Membuat Aplikasi Baru untuk belajar cara membuat aplikasi di Back4App.

Ringkasan perubahan

Perubahan yang paling mencolok adalah sebagai berikut:

1. Cloud Code berjalan dengan Parse-SDK 2.x.

Sebelumnya, Cloud Code berjalan dengan Parse-SDK 1.x. Dengan Parse Server 3.1, ia berjalan dengan Parse-SDK 2.x.

Lihat di rilis Parse SDK untuk memahami lebih baik apa yang dimaksud. Peningkatan versi utama ini sebagian besar melibatkan perbaikan bug. Ini juga menambahkan containedBy dan includeAll metode query, serta kemampuan untuk mengambil objek dengan includes.

2. Pembaruan agregat

Sejak Parse 2.7.1, Anda dapat menggunakan agregat metode pada query. Ini memungkinkan Anda untuk memanfaatkan database yang mendasarinya sedikit lebih banyak. Sekarang, sintaks untuk metode agregat pada Parse.Query telah diperbarui.

Anda dapat mengeksekusi query menggunakan dua tahap: cocok dan grup tahap.

1 // mencocokkan pengguna yang namanya Foo, dan mengelompokkan berdasarkan objectId mereka 2 const pipeline = [{ group: { objectId: {} } }, { match: { name: 'Foo' } }]; 3 4 var query = new Parse.Query("Person"); 5 query.aggregate(pipeline)

Sebelumnya, Anda tidak perlu kunci pipeline dalam objek pipeline. Karena API yang mendasarinya, Anda sekarang harus secara eksplisit menyertakan kunci pipeline. Nilainya harus berupa array dari satu atau dua tahap, yang menampilkan group dan match.

Lihat di Dokumentasi Resmi Parse untuk contoh yang lebih spesifik.

3. Optimisasi di balik layar

Beberapa optimisasi di balik layar telah dilakukan. Misalnya, sebuah Parse LiveQuery akan mengambil Izin Tingkat Kelas (CLP) bersama dengan data untuk mencegah akses database ganda.

4. Email Reset Parse

Saat meminta email reset kata sandi, server akan mengembalikan keberhasilan meskipun email tersebut tidak disimpan. Selain itu, token reset kata sandi akan kedaluwarsa ketika email pengguna direset.

5. Pembaruan pemicu cloud

Dengan rilis ini, Anda dapat berbagi data antara beforeSave dan afterSave pemicu pada objek yang sama. Misalnya:

JS


Anda dapat melihat lebih banyak tentang perubahan di Parse Server dalam Changelog resmi Parse 3.1 dengan mengklik di sini.

6. Peningkatan LiveQuery

Klien Parse LiveQuery memungkinkan Anda untuk berlangganan pada kueri, dan menerima pembaruan dari server saat mereka datang. Kueri Tradisional dieksekusi sekali oleh klien, jadi ini sangat membantu untuk kasus seperti pengiriman pesan, dll.

Dengan Back4App Anda juga bisa memanfaatkan teknologi ini.

Dengan rilis 3.x, komunitas Parse telah meningkatkan sistem untuk LiveQuery ACLs.

Anda sekarang dapat melewatkan token sesi ke metode subscribe dari query langsung, dan Parse Server akan mengelola hanya mengembalikan hasil yang dapat diakses oleh pengguna ini. Misalnya, seorang pengguna mungkin memiliki akses baca/tulis ke ‘Pesan’ tertentu, tetapi tidak semua.

JS


Kode di atas akan secara otomatis berlangganan ke semua pesan yang dapat diakses oleh pengguna, membebaskan Anda dari tanggung jawab untuk men-query pesan tertentu.

Bagian utama dari perubahan berkaitan dengan bagaimana Cloud Code ditangani. Untuk ini, lihat panduan migrasi di bawah.

1 - Menyelaraskan dasar teknis

Kami akan memulai dengan contoh proyek cloud menggunakan rilis 2.x. Dengan cara itu kami dapat menavigasi melalui perubahan sintaks yang sesuai. Anda dapat melihat repositori untuk proyek contoh ini.

Jika Anda sudah familiar dengan async dan await, Anda dapat melewati bagian ini.

Evolusi kode asinkron dalam Javascript terlihat seperti ini:

Setiap aplikasi Javascript modern kemungkinan besar akan menggunakan ketiga hal ini. Fungsi callback melibatkan pengiriman sebuah fungsi sebagai argumen ke fungsi lain. Fungsi kedua ini dapat mengeksekusi yang pertama pada suatu titik.

JS


Callback sangat penting tetapi bisa menjadi rumit ketika harus menghubungkan banyak di antaranya. Secara khusus, menumpuk beberapa lapisan bisa sulit dibaca, dan penanganan kesalahan terbukti sulit. Oleh karena itu, di ES2015 Promise diperkenalkan.

JS


Janji meningkatkan keterbacaan pemrograman asinkron. Mereka juga membuat alur kerja lebih eksplisit. Tetapi langkah yang lebih besar diambil di ES2017 dengan konstruksi async / await. Kode Anda sekarang dapat menunggu hasil dari sebuah Janji tanpa bergantung pada blok then / catch (yang juga bisa menjadi sulit dibaca).

JS


Mungkin untuk contoh yang sangat sederhana, ini mungkin tidak terlihat lebih elegan daripada janji biasa. Tetapi menunggu hasil dari fungsi asinkron sering kali adalah apa yang ingin kita lakukan. Oleh karena itu, ini benar-benar mengoptimalkan keterbacaan kode kita.

Dukungan untuk async/await

Seperti yang telah disebutkan, async/await dimasukkan dalam spesifikasi ECMAScript 2017 (es8). Untuk kode server, versi tidak menjadi masalah karena Anda dapat memperbarui ke versi Node.js yang mendukung fitur ini. Yakinlah, lingkungan Back4App mendukung versi stabil terbaru. Untuk kode browser, transpiler seperti Babel akan menghasilkan es2016 yang kompatibel dengan kode yang menggunakan async / await dan berfungsi di browser modern.

2 - Memikirkan tentang kode Anda dengan cara yang berbeda

Perubahan utama dengan Cloud Code melibatkan apa yang dilakukan pengembang versus apa yang dilakukan pustaka. Sebelumnya, Anda akan secara eksplisit mengelola respons. Karena sebagian besar Cloud Code akan dieksekusi secara asinkron - melakukan kueri dan penulisan database - lebih masuk akal untuk mengembalikan Promise, mengurangi kode boilerplate.

Intuisi di balik fungsi Cloud adalah bahwa ada pengaturan dan konfigurasi minimal yang terlibat dalam menulis kode sisi server. Rilis ini mewujudkan ide itu; ingatlah ini saat Anda melakukan refactoring dan membuat fungsi baru.

Untuk menunjukkan bagaimana fungsi Cloud Code bekerja di Parse Server 3.1, kami menulis ulang contoh Cloud Code fungsional dari versi Parse Server sebelum migrasi. Anda dapat menemukan kode ini dengan mengklik di sini. Fungsi Cloud Code yang sama ditulis di Parse 3.1 seperti yang ditunjukkan di bawah.

JS


3 - Menambahkan semua penanda async

Setiap fungsi yang menggunakan await harus dideklarasikan dengan modifier async. Refactoring sederhana ini akan melampirkan async ke semua Cloud Functions. Ini juga akan menggantinya dengan fungsi panah karena mereka lebih ringkas dalam kasus ini (dan apa yang digunakan oleh panduan resmi Parse yang diperbarui).

JS


Kode Anda akan terlihat seperti ini setelah refactoring ini

Tidak ada yang gila sejauh ini. Di langkah berikutnya, kita akan mendapatkan nilai uang kita untuk perubahan ini.

4 - Menghapus referensi ke respons, menggunakan await

Kode Anda akan terlihat seperti ini setelah refactoring ini

Langkah ini sedikit lebih rumit. Kita perlu:

  • Hapus semua referensi ke variabel ‘response’, kembalikan sebuah promise sebagai gantinya
  • Dalam kasus beberapa fungsi query/simpan, tunggu responsenya

Periksa metode pembuatan komentar untuk melihat bagaimana ini dilakukan

JS


Perhatikan bahwa:

  • Sekarang sebuah Kesalahan JavaScript dilemparkan alih-alih memanggil response.error. Parse akan menangani mengubah ini menjadi respons untuk kita.
  • Menghapus ‘Post’ atau ‘Komentar’ melibatkan mengambil objek terlebih dahulu, kemudian menghancurkannya. Dengan menggunakan ‘await’, metode hancurkan dapat mengakses objek yang disimpan di luar blok.

Itu menyelesaikan semua refactoring yang diperlukan untuk migrasi. Artinya, jika Anda melakukan hingga Langkah ini, selamat! Kode Anda akan berjalan di Back4App Parse 3.1!

5 - Trik Lanjutan (opsional)

Perubahan berikut bersifat opsional tetapi dapat memperpendek kode Anda secara signifikan. Saya menemukan bahwa mereka mengurangi boilerplate.

Anda mungkin telah memperhatikan banyak pemeriksaan manual untuk parameter atau pengguna yang terautentikasi. Ini memastikan bahwa perilaku aneh tidak terjadi. Misalnya, kami telah memutuskan bahwa objek ‘Post’ kami membutuhkan teks, jadi jika tidak ada parameter ‘teks’ yang diteruskan, objek akan disimpan tanpa itu. Salah satu cara untuk mencegah ini adalah dengan memeriksa bahwa teks telah diteruskan.

Tetapi pemeriksaan manual bisa memakan waktu dan tidak elegan. Di bagian ini, kami memanfaatkan destructuring objek untuk menyelesaikan pemeriksaan ini secara implisit.

Anda harus melihat dokumentasi di atas jika Anda tidak tahu apa itu destructuring. Tetapi secara singkat, ini memungkinkan Anda mengubah properti objek menjadi variabel dengan sintaks yang sangat ringkas.

JS


Destructuring lebih ringkas daripada penugasan manual. Ini juga memungkinkan Anda untuk mendeklarasikan variabel parameter secara langsung, yang sangat baik:

JS


Ketika digabungkan dengan notasi es2015 untuk inisialisasi objek kita dapat mengoptimalkan pemeriksaan parameter kita.

Kita bisa melakukan ini:

JS


Jadi untuk kode Parse kami, kami bisa melakukan ini:

JS


Jika ini terasa menakutkan, jangan khawatir. kode lengkap contoh ini mungkin membantu.

Singkatnya, ‘AssertParams’ adalah fungsi utilitas untuk melempar kesalahan jika sebuah nilai tidak terdefinisi. Kami dapat memeriksa parameter dalam satu gerakan dengan menggabungkan destrukturisasi objek dan inisialisasi objek es2015.

Ini menghilangkan delapan atau sembilan pemeriksaan manual yang mulai menjadi tidak sedap dipandang setelah beberapa saat.

6 - Meningkatkan di Back4App

Setelah Anda memigrasikan kode Anda, Anda harus melakukan dua hal lagi agar dapat berjalan di Back4App.

  1. Tingkatkan versi server Back4App Anda
  2. Unggah kode cloud baru Anda.

Saya telah menyebutkan langkah pertama secara singkat sebelumnya. Yang perlu Anda lakukan adalah masuk ke Back4App dan pergi ke dasbor aplikasi Anda. Dari sana, cukup pilih “Pengaturan Server” di sebelah kiri, diikuti dengan tombol “Pengaturan” pada kartu “Kelola Parse Server”. Anda kemudian dapat memilih tombol radio Parse Server 3.1.1 dan tekan “Simpan”.

Terakhir tetapi tidak kalah penting, Anda dapat mengunggah kode Anda melalui Back4App CLI, atau dasbor Anda menggunakan unggahan manual. Lihat panduan ini jika Anda memerlukan informasi lebih lanjut tentang langkah ini.

Catatan tentang peluncuran versi baru

Jika kode Anda kompleks, mungkin ide yang baik untuk menjalankan beberapa tes sebelum melakukan dua langkah ini. Back4App memiliki beberapa panduan tentang cara melakukannya di sini dan di sini.

Akhirnya, penting untuk dicatat bahwa perubahan ini adalah breaking. Menggunakan kode yang kami tulis di Parse Server 2.x akan gagal, dan menggunakan kode 2.x di server 3.1 juga akan gagal. Oleh karena itu, Anda harus memastikan untuk memperbarui versi Parse Back4App Anda segera setelah Anda mengunggah Cloud Code yang telah diperbarui. Jika Anda memiliki banyak pengguna dan khawatir tentang pengunggahan kode dan peningkatan versi yang sedikit tidak sinkron, Anda dapat melakukan sesuatu seperti ini.

JS


Kode ini secara dinamis menentukan versi dan mendefinisikan Cloud Functions berdasarkan itu. Setelah mengunggah ini, Anda akan beralih ke 3.1, dan kemudian Anda dapat mengunggah ulang kode dengan bagian lama dihapus. Termasuk pemeriksaan di awal memastikan tidak ada titik di mana kode Anda akan crash. Karena Anda dapat memperbarui dan mengunggah dalam beberapa detik, biasanya tidak perlu.

Kesimpulan

Dalam panduan ini, kami menunjukkan dengan sederhana bagaimana cara memigrasikan Cloud Code Anda ke rilis Parse 3.1. Ingat untuk meningkatkan versi Back4App Anda ke 3.1 setelah Anda melakukan perubahan ini.

Juga penting, panduan ini menunjukkan sintaks yang ditingkatkan yang dimanfaatkan oleh Parse 3.1. Refactoring kami mengurangi basis kode dari ~160 baris menjadi ~90 dan membuatnya jauh lebih mudah dibaca. Untuk aplikasi nyata, ini akan memberikan keuntungan.