Advanced Guides
Cara Tingkatkan Kode Cloud dengan Parse Server 3.1
24 mnt
lebih banyak kekuatan untuk aplikasi anda dengan parse server 3 1 pendahuluan komunitas parse baru baru ini merilis versi 3 1 dari parse server https //docs parseplatform org/parse server/guide/ 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 error atau success 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 https //github com/considine , pengembang utama di k optional https //koptional com/ 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 parse query telah diperbarui anda dapat mengeksekusi query menggunakan dua tahap cocok cocok dan grup grup tahap 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 group dan match 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 1 parse cloud beforesave('comment', async request => { 2 request context = { 3 foo 'bar' 4 }; 5 }); 6 7 parse cloud aftersave('comment', async request => { 8 console log(request context foo); //bar 9 }); 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 https //www back4app com/docs/platform/parse server live query example dengan rilis 3 x, komunitas parse telah meningkatkan sistem untuk livequery acls https //docs parseplatform org/js/guide/#security for other objects 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 1 let query = new parse query('message'); 2 // you can get session token with 3 // parse user current() getsessiontoken() when logged in 4 let subscription = client subscribe(query, sessiontoken); 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 fungsi callback janji async / await 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 1 // callbacks 2 // executes callback function after waiting 100 milliseconds 3 settimeout(function() { 4 alert('my callback function'); 5 }, 100); 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 1 // promises 2 // executes several promises in a row with no significant nesting 3 const mypromise = new promise(function(resolve, reject) { 4 settimeout(function() { 5 if (math random() < 0 2) reject(new error('random failure!')); 6 resolve('finished'); 7 }, 100); 8 }); 9 10 // executes this promise 4 times and catches errors involved 11 mypromise 12 then(() => mypromise) 13 then(() => mypromise) 14 then(() => mypromise) 15 then(() => mypromise) 16 catch(e => console log(e)); 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) 1 // using the definition of mypromise from the above code 2 async function foo() { 3 try { 4 let result = await mypromise; 5 result = await mypromise; 6 result = await mypromise; 7 } catch (e) { 8 console log(e); 9 } 10 } 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 1 // cloud code before migration 2 // full code found in link above 3 const post = 'post'; 4 parse cloud define('posts\ get', function(request, response) { 5 // needs a post id 6 return new parse query(post) 7 get(request params id, { usemasterkey true }) 8 then(post => { 9 response success(post); 10 }) 11 catch(e => { 12 response error({ message e message }); 13 }); 14 }); 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) 1 // snippet of step 2 code refactoring see full code 2 // here in the link at the top of this step 3 const post = 'post'; 4 const comment = 'comment'; 5 6 parse cloud define('posts\ get', async (request) => { 7 // needs a post id 8 return new parse query(post) 9 get(request params id, { usemasterkey true }); 10 } 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 1 // snippet of step 3 code refactoring see full code 2 // here in the link at the top of this step 3 parse cloud define('comment\ create', async request => { 4 // post should have text and should have a user and a post id 5 if (!request user) { 6 throw new error('unauthenticated!'); 7 } 8 9 if (!request params text) { 10 throw new error('a comment needs text!'); 11 } 12 if (!request params post id) { 13 throw new error('a comment needs a post!'); 14 } 15 16 // get the post 17 18 const post = await new parse query(post) get(request params post id, { 19 usemasterkey true 20 }); 21 return new parse object(comment, { 22 text request params text, 23 user request user, 24 post post 25 }) save(null, { usemasterkey true }); 26 }); 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 1 // this 2 var obj = { 3 hi true, 4 bye false 5 }; 6 var hi = obj hi; 7 var bye = obj bye; 8 9 // is equivalent to this 10 var obj = { 11 hi true, 12 bye false 13 }; 14 var { hi, bye } = obj; 15 16 console log(hi); 17 // true 18 console log(bye); 19 // false destructuring lebih ringkas daripada penugasan manual ini juga memungkinkan anda untuk mendeklarasikan variabel parameter secara langsung, yang sangat baik 1 parse cloud define('posts\ get', async ({ params { id } }) => { 2 // id is declared 3 }); ketika digabungkan dengan notasi es2015 untuk inisialisasi objek kita dapat mengoptimalkan pemeriksaan parameter kita kita bisa melakukan ini 1 // iterates through object's keys makes sure, for each key, the value is set 2 const assertparams = parameter obj => { 3 for (var key of object keys(parameter obj)) { 4 if (typeof parameter obj\[key] === 'undefined') 5 throw new error(`missing parameter ${key}`); 6 } 7 }; 8 9 var obj = { 10 hi true, 11 bye false 12 }; 13 var { hi, undef, bye } = obj; // undef will be undefined 14 var check 1 = { hi, bye }; 15 var check 2 = { hi, undef }; 16 17 // check = { hi true, no undefined } 18 assertparams(check 1); // passes 19 assertparams(check 2); // throws error jadi untuk kode parse kami, kami bisa melakukan ini 1 // snippet of advanced code refactoring see full code 2 // here in the link at the top of this step 3 parse cloud define('posts\ delete', async ({ user, params { id } }) => { 4 // makes sure user is authenticated, and id parameter is passed 5 assertparams({ user, id }); 6 const post = await new parse query(post) get(id, { 7 usemasterkey true 8 }); 9 return post destroy({ usemasterkey true }); 10 }); 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 tingkatkan versi server back4app anda 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 https //blog back4app com/2017/01/20/cli parse server/ , atau dasbor anda menggunakan unggahan manual lihat panduan ini https //www back4app com/docs/android/parse cloud code 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 1 const serverversion = 2 parse coremanager get('version') === 'js1 11 1' ? 'old' 'new'; 3 4 if (serverversion === 'new') { 5 parse cloud define('posts\ get', async ({ params { id } }) => { 6 assertparams({ id }); 7 // needs a post id 8 return new parse query(post) get(id, { 9 usemasterkey true 10 }); 11 }); 12 } else if (serverversion === 'old') { 13 // old definition here 14 } 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