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 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 https //github com/back4app/parse server break changes yang disediakan ini adalah tutorial tamu yang ditulis oleh https //github com/considine , pengembang utama di 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 https //www back4app com/docs/get started/new parse app 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 https //github com/parse community/parse sdk js/releases untuk memahami lebih baik apa yang dimaksud peningkatan versi utama ini sebagian besar melibatkan perbaikan bug ini juga menambahkan https //parseplatform org/parse sdk js/api/2 1 0/parse query html#containedby dan https //parseplatform org/parse sdk js/api/2 1 0/parse query html#includeall metode query, serta kemampuan untuk mengambil objek dengan includes 2 pembaruan agregat sejak parse 2 7 1, anda dapat menggunakan https //parseplatform org/parse sdk js/api/2 1 0/parse query html#aggregate metode pada query ini memungkinkan anda untuk memanfaatkan database yang mendasarinya sedikit lebih banyak sekarang, sintaks untuk https //parseplatform org/parse sdk js/api/2 1 0/parse query html#aggregate pada parse query parse query telah diperbarui anda dapat mengeksekusi query menggunakan dua tahap cocok cocok dan grup 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 group dan match match lihat di https //docs parseplatform org/js/guide/#aggregate untuk contoh yang lebih spesifik 3 optimisasi di balik layar beberapa optimisasi di balik layar telah dilakukan misalnya, sebuah https //parseplatform org/parse sdk js/api/2 1 0/parse livequery html 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 https //docs parseplatform org/cloudcode/guide/#beforesave triggers dan https //docs parseplatform org/cloudcode/guide/#aftersave triggers 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 https //github com/parse community/parse server/blob/alpha/changelog md 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 https //www back4app com/docs/platform/parse server live query example dengan rilis 3 x, komunitas parse telah meningkatkan sistem untuk livequery 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 https //github com/back4app/parse server break changes 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 https //developer mozilla org/en us/docs/glossary/callback function https //developer mozilla org/en us/docs/web/javascript/reference/global objects/promise https //developer mozilla org/en us/docs/web/javascript/reference/statements/async function 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 https //www ecma international org/ecma 262/8 0/#sec async function definitions 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 https //www ecma international org/ecma 262/8 0 (es8) untuk kode server, versi tidak menjadi masalah karena anda dapat memperbarui ke https //node green/#es2017 yakinlah, lingkungan back4app mendukung versi stabil terbaru untuk kode browser, transpiler seperti https //babeljs io/ 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 https //github com/back4app/parse server break changes/tree/step 1 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 https //developer mozilla org/en us/docs/web/javascript/reference/functions/arrow functions 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 https //github com/back4app/parse server break changes/tree/step 2 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 https //github com/back4app/parse server break changes/tree/step 3 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 https //developer mozilla org/en us/docs/web/javascript/reference/operators/destructuring assignment 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 https //developer mozilla org/en us/docs/web/javascript/reference/operators/object initializer#new notations in ecmascript 2015 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 https //github com/back4app/parse server break changes/tree/step advanced 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 https //blog back4app com/2017/01/20/cli parse server/ , atau dasbor anda menggunakan unggahan manual lihat 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 https //www back4app com/docs/advanced guides/parse cloud code testing dan https //www back4app com/docs/cloud code functions/unit tests 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