Advanced Guides
วิธีอัปเกรด Parse Server เป็นเวอร์ชัน 3.1 สำหรับนักพัฒนา
20 นาที
เพิ่มพลังให้กับแอปของคุณด้วย parse server 3 1 บทนำ ชุมชน parse เพิ่งปล่อยเวอร์ชัน 3 1 ของ parse server https //docs parseplatform org/parse server/guide/ การอัปเดตนี้ได้ทำความสะอาดไวยากรณ์ cloud code มันเหมาะสมมากขึ้นในการใช้โครงสร้าง es6 async และ await นอกจากนี้ยังมีการลดความแปลกประหลาดบางอย่างที่เกี่ยวข้องกับการใช้ parse เช่น ฟังก์ชัน cloud จะคืนค่า promise แทนที่จะใช้ ข้อผิดพลาด ข้อผิดพลาด หรือ ความสำเร็จ ความสำเร็จ ในวัตถุ response คุณสามารถอัปเกรดแอปของคุณบน back4app ได้อย่างง่ายดายจากแดชบอร์ดของคุณ คู่มือนี้จะแสดงวิธีการอัปเกรดโค้ดของคุณเพื่อใช้ประโยชน์จากฟีเจอร์ใหม่ของ 3 1 ในการติดตามคู่มือนี้คุณยินดีที่จะดูที่ โครงการตัวอย่าง ที่จัดเตรียมไว้ นี่คือบทเรียนจากแขกที่เขียนโดย จอห์น คอนซิดีน https //github com/considine , นักพัฒนาหัวหน้าที่ k optional https //koptional com/ เป้าหมาย เพื่ออัปเดต back4app parse server ของคุณเป็น 3 1 และย้าย cloud code ของคุณให้เหมาะสม ข้อกำหนดเบื้องต้น ในการทำบทเรียนนี้ให้เสร็จสิ้น คุณต้อง ° มีแอป back4app ที่มีอยู่ซึ่งใช้ parse server 2 x ° ติดตาม บทเรียนการสร้างแอปใหม่ เพื่อเรียนรู้วิธีการสร้างแอปที่ back4app สรุปการเปลี่ยนแปลง การเปลี่ยนแปลงที่สำคัญที่สุดมีดังนี้ 1\ cloud code ทำงานร่วมกับ parse sdk 2 x ก่อนหน้านี้ cloud code ทำงานร่วมกับ parse sdk 1 x ด้วย parse server 3 1 มันทำงานกับ parse sdk 2 x ดูที่ การปล่อย parse sdk เพื่อทำความเข้าใจให้ดีขึ้นว่าสิ่งนี้เกี่ยวข้องกับอะไร การปรับรุ่นหลักนี้ส่วนใหญ่เกี่ยวข้องกับการแก้ไขข้อบกพร่อง นอกจากนี้ยังเพิ่ม containedby และ includeall วิธีการค้นหา รวมถึงความสามารถในการดึงวัตถุพร้อมกับ includes 2 การอัปเดตแบบรวม ตั้งแต่ parse 2 7 1 คุณสามารถใช้ aggregate วิธีการในคำค้น นี่ช่วยให้คุณใช้ประโยชน์จากฐานข้อมูลที่อยู่เบื้องหลังได้มากขึ้น ตอนนี้ ไวยากรณ์สำหรับ วิธีการ aggregate ใน parse query parse query ได้รับการอัปเดตแล้ว คุณสามารถดำเนินการค้นหาด้วยสองขั้นตอน match match และ group group ขั้นตอน ก่อนหน้านี้ คุณไม่จำเป็นต้องใช้คีย์ pipeline ในอ็อบเจ็กต์ pipeline เนื่องจาก api ที่อยู่เบื้องหลัง ตอนนี้คุณต้องรวมคีย์ pipeline อย่างชัดเจน ค่าในนั้นควรเป็นอาร์เรย์ของหนึ่งหรือสองขั้นตอน ซึ่งมี กลุ่ม กลุ่ม และ จับคู่ จับคู่ ดูที่ เอกสารทางการของ parse สำหรับตัวอย่างที่เฉพาะเจาะจงมากขึ้น 3 การปรับแต่งที่อยู่เบื้องหลัง มีการปรับแต่งที่อยู่เบื้องหลังบางอย่างที่ได้ทำขึ้น ตัวอย่างเช่น parse livequery จะดึงข้อมูล class level permissions (clps) พร้อมกับข้อมูลเพื่อป้องกันการเข้าถึงฐานข้อมูลซ้ำ 4\ อีเมลรีเซ็ต parse เมื่อขออีเมลรีเซ็ตรหัสผ่าน เซิร์ฟเวอร์จะส่งกลับความสำเร็จแม้ว่าจะไม่มีอีเมลนั้นถูกบันทึก นอกจากนี้ โทเค็นรีเซ็ตรหัสผ่านจะหมดอายุเมื่ออีเมลของผู้ใช้ถูกรีเซ็ต 5\ การอัปเดตการกระตุ้นคลาวด์ ด้วยการเปิดตัวนี้ คุณสามารถแชร์ข้อมูลระหว่าง beforesave และ aftersave การกระตุ้นในวัตถุเดียวกัน ตัวอย่างเช่น 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 }); คุณสามารถดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงใน parse server ได้ใน parse 3 1 changelog อย่างเป็นทางการโดยคลิก ที่นี่ 6\ การปรับปรุง livequery ลูกค้า parse livequery ช่วยให้คุณสมัครสมาชิกการค้นหาและรับการอัปเดตจากเซิร์ฟเวอร์เมื่อมีการเข้ามา การค้นหาแบบดั้งเดิมจะถูกดำเนินการเพียงครั้งเดียวโดยลูกค้า ดังนั้นจึงมีประโยชน์มากสำหรับกรณีเช่นการส่งข้อความ เป็นต้น ด้วย back4app คุณยังสามารถ ใช้ประโยชน์จากเทคโนโลยีนี้ https //www back4app com/docs/platform/parse server live query example ด้วยการเปิดตัว 3 x ชุมชน parse ได้ปรับปรุงระบบสำหรับ livequery acls https //docs parseplatform org/js/guide/#security for other objects คุณสามารถส่งโทเค็นเซสชันไปยังวิธี subscribe ของการค้นหาสด และ parse server จะจัดการเฉพาะการส่งคืนผลลัพธ์ที่ผู้ใช้คนนี้เข้าถึงได้เท่านั้น ตัวอย่างเช่น ผู้ใช้อาจมีสิทธิ์อ่าน/เขียนใน ‘ข้อความ’ บางรายการ แต่ไม่ใช่ทั้งหมด 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); โค้ดข้างต้นจะสมัครสมาชิกโดยอัตโนมัติสำหรับข้อความทั้งหมดที่ผู้ใช้เข้าถึงได้ ทำให้คุณไม่ต้องรับผิดชอบในการค้นหาข้อความเฉพาะ ส่วนหลักของการเปลี่ยนแปลงเกี่ยวข้องกับวิธีการจัดการ cloud code สำหรับสิ่งนี้ โปรดดูคู่มือการย้ายข้อมูลด้านล่าง 1 การปรับแนวทางพื้นฐานทางเทคนิค เราจะเริ่มด้วยตัวอย่างโครงการคลาวด์โดยใช้เวอร์ชัน 2 x ด้วยวิธีนี้เราสามารถนำทางผ่านการเปลี่ยนแปลงของไวยากรณ์ที่เหมาะสม คุณสามารถดู ที่เก็บข้อมูล สำหรับโครงการตัวอย่างนี้ หากคุณคุ้นเคยกับ async และ await คุณสามารถข้ามส่วนนี้ได้ วิวัฒนาการของโค้ดแบบอะซิงโครนัสใน javascript ดูเหมือนจะเป็นแบบนี้ ฟังก์ชัน callback promises async / await แอปพลิเคชัน javascript สมัยใหม่ใด ๆ จะใช้ทั้งสามอย่างนี้ ฟังก์ชัน callback เกี่ยวข้องกับการส่งฟังก์ชันเป็นอาร์กิวเมนต์ไปยังฟังก์ชันอื่น ฟังก์ชันที่สองนี้สามารถเรียกใช้ฟังก์ชันแรกในบางจุด 1 // callbacks 2 // executes callback function after waiting 100 milliseconds 3 settimeout(function() { 4 alert('my callback function'); 5 }, 100); คอลแบ็กเป็นสิ่งจำเป็น แต่สามารถยุ่งเหยิงเมื่อเกี่ยวข้องกับการเชื่อมโยงหลาย ๆ ตัว โดยเฉพาะอย่างยิ่ง การซ้อนหลายชั้นอาจอ่านได้ยาก และการจัดการข้อผิดพลาดก็พิสูจน์ได้ยาก ดังนั้นใน es2015 จึงมีการแนะนำ promise 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)); พรอมิสช่วยปรับปรุงความสามารถในการอ่านของการเขียนโปรแกรมแบบอะซิงโครนัส พวกเขายังทำให้ท่อส่งข้อมูลชัดเจนยิ่งขึ้น แต่ก้าวที่ใหญ่กว่านั้นเกิดขึ้นใน es2017 ด้วยโครงสร้าง async / await โค้ดของคุณสามารถรอผลลัพธ์ของพรอมิสโดยไม่ต้องพึ่งพาบล็อก then / catch (ซึ่งอาจอ่านได้ยากเช่นกัน) 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 } อาจจะสำหรับตัวอย่างที่ง่ายมากนี้ อาจดูไม่สง่างามมากกว่าพรอมิสธรรมดา แต่การรอผลลัพธ์ของฟังก์ชันอะซิงโครนัสมักจะเป็นสิ่งที่เราต้องการทำ ดังนั้นมันจึงช่วยเพิ่มความสามารถในการอ่านของโค้ดของเราอย่างแท้จริง การสนับสนุนสำหรับ async/await ตามที่กล่าวไว้ข้างต้น async/await ถูกนำมาใช้ใน ข้อกำหนด ecmascript 2017 (es8) สำหรับโค้ดเซิร์ฟเวอร์ การจัดการเวอร์ชันแทบจะไม่ใช่ปัญหา เนื่องจากคุณสามารถอัปเดตเป็น เวอร์ชันของ node js ที่สนับสนุนฟีเจอร์เหล่านี้ สบายใจได้ว่า สภาพแวดล้อมของ back4app สนับสนุนเวอร์ชันที่เสถียรล่าสุด สำหรับโค้ดเบราว์เซอร์ ตัวแปลงโค้ดเช่น babel จะผลิต es2016 ที่เข้ากันได้กับโค้ดที่ใช้ async / await และทำงานในเบราว์เซอร์สมัยใหม่ 2 คิดเกี่ยวกับโค้ดของคุณในแบบที่แตกต่างออกไป การเปลี่ยนแปลงหลักเกี่ยวกับ cloud code เกี่ยวข้องกับสิ่งที่นักพัฒนาทำเมื่อเปรียบเทียบกับสิ่งที่ไลบรารีทำ ก่อนหน้านี้คุณจะต้องจัดการกับการตอบสนองอย่างชัดเจน เนื่องจาก cloud code ส่วนใหญ่จะทำงานแบบอะซิงโครนัส ทำการสอบถามและเขียนฐานข้อมูล จึงมีเหตุผลมากขึ้นที่จะส่งคืน promise เพื่อลดโค้ดที่ไม่จำเป็น สัญชาตญาณเบื้องหลังฟังก์ชัน cloud คือการตั้งค่าและการกำหนดค่าที่เกี่ยวข้องกับการเขียนโค้ดฝั่งเซิร์ฟเวอร์มีน้อยมาก การปล่อยตัวนี้เป็นตัวแทนของแนวคิดนั้น; โปรดจำสิ่งนี้ไว้เมื่อคุณกำลังปรับโครงสร้างและสร้างฟังก์ชันใหม่ เพื่อแสดงให้เห็นว่าฟังก์ชัน cloud code ทำงานอย่างไรใน parse server 3 1 เราได้เขียนโค้ดตัวอย่าง cloud code ที่ใช้งานได้ใหม่จากเวอร์ชันของ parse server ก่อนการย้ายข้อมูล คุณสามารถค้นหาโค้ดนี้ได้โดยคลิก ที่นี่ ฟังก์ชัน cloud code เดียวกันนี้เขียนใน parse 3 1 ดังที่แสดงด้านล่าง 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 การเพิ่มเครื่องหมาย async ทั้งหมด ฟังก์ชันใด ๆ ที่ใช้ await จะต้องประกาศด้วยตัวปรับแต่ง async การปรับโครงสร้างง่าย ๆ นี้จะเชื่อมต่อ async กับ cloud functions ทั้งหมด นอกจากนี้ยังจะแทนที่พวกเขาด้วย ฟังก์ชันลูกศร เนื่องจากมันกระชับมากกว่าในกรณีนี้ (และเป็นสิ่งที่คู่มือ parse ที่อัปเดตใช้) 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 } โค้ดของคุณจะดูเหมือน นี้ หลังจากการปรับโครงสร้างนี้ ไม่มีอะไรบ้าไปจนถึงตอนนี้ ในขั้นตอนถัดไป เราจะได้รับความคุ้มค่าสำหรับการเปลี่ยนแปลงนี้ 4 การลบการอ้างอิงถึงการตอบสนอง ใช้ await โค้ดของคุณจะดูเหมือน นี้ หลังจากการปรับโครงสร้างนี้ ขั้นตอนนี้ค่อนข้างยุ่งยาก เราต้อง ลบการอ้างอิงทั้งหมดไปยังตัวแปร ‘response’ และคืนค่าพรอมิสแทน ในกรณีที่มีฟังก์ชัน query/save หลายฟังก์ชัน ให้รอการตอบกลับ ตรวจสอบวิธีการสร้างความคิดเห็นเพื่อดูว่าทำอย่างไร 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 }); โปรดทราบว่า ตอนนี้มีข้อผิดพลาด javascript ถูกโยนแทนที่จะเรียกใช้ response error parse จะจัดการการแปลงนี้เป็นการตอบกลับให้เรา การลบ ‘โพสต์’ หรือ ‘ความคิดเห็น’ เกี่ยวข้องกับการดึงวัตถุก่อนแล้วจึงทำลายมัน โดยการใช้ ‘await’ วิธีการทำลายสามารถเข้าถึงวัตถุที่บันทึกไว้ภายนอกบล็อก นี่คือการปรับโครงสร้างทั้งหมดที่จำเป็นสำหรับการย้ายข้อมูล กล่าวคือ หากคุณทำจนถึงขั้นตอนนี้ ขอแสดงความยินดี! โค้ดของคุณจะทำงานบน back4app parse 3 1! 5 เทคนิคขั้นสูง (ไม่บังคับ) การเปลี่ยนแปลงต่อไปนี้เป็นทางเลือก แต่สามารถทำให้โค้ดของคุณสั้นลงอย่างมาก ฉันพบว่ามันช่วยลดโค้ดที่ซ้ำซ้อน คุณอาจสังเกตเห็นการตรวจสอบด้วยตนเองมากมายสำหรับพารามิเตอร์หรือผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์ สิ่งเหล่านี้ช่วยให้แน่ใจว่าพฤติกรรมแปลก ๆ จะไม่เกิดขึ้น ตัวอย่างเช่น เราได้ตัดสินใจว่าอ็อบเจ็กต์ ‘โพสต์’ ของเราต้องการข้อความ ดังนั้นหากไม่มีพารามิเตอร์ ‘ข้อความ’ ถูกส่ง อ็อบเจ็กต์จะถูกบันทึกโดยไม่มีมัน หนึ่งในวิธีการป้องกันสิ่งนี้คือการตรวจสอบว่ามีการส่งข้อความหรือไม่ แต่การตรวจสอบด้วยตนเองอาจใช้เวลานานและไม่สวยงาม ในส่วนนี้เราจะใช้ประโยชน์จาก การทำลายโครงสร้างของอ็อบเจ็กต์ เพื่อทำการตรวจสอบเหล่านี้โดยอัตโนมัติ คุณควรดูเอกสารข้างต้นหากคุณไม่รู้ว่าการทำลายโครงสร้างคืออะไร แต่โดยสั้น ๆ มันช่วยให้คุณเปลี่ยนคุณสมบัติของอ็อบเจ็กต์ให้เป็นตัวแปรด้วยไวยากรณ์ที่กระชับมาก 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 การทำลายโครงสร้างมีความกระชับน้อยกว่าการกำหนดค่าด้วยตนเอง มันยังช่วยให้คุณประกาศตัวแปรพารามิเตอร์ได้อย่างรวดเร็วซึ่งเป็นสิ่งที่ดี 1 parse cloud define('posts\ get', async ({ params { id } }) => { 2 // id is declared 3 }); เมื่อรวมกับการบันทึก es2015 สำหรับ การเริ่มต้นวัตถุ เราสามารถเพิ่มประสิทธิภาพการตรวจสอบพารามิเตอร์ของเราได้ เราสามารถทำเช่นนี้ 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 ดังนั้นสำหรับโค้ด parse ของเรา เราสามารถทำได้ดังนี้ 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 }); ถ้านี่ดูน่ากลัว อย่ากังวลไปเลย ตัว โค้ดทั้งหมด ตัวอย่างอาจช่วยได้ โดยสรุป ‘assertparams’ เป็นฟังก์ชันยูทิลิตี้สำหรับโยนข้อผิดพลาดหากค่าที่กำหนดเป็น undefined เราสามารถตรวจสอบพารามิเตอร์ในครั้งเดียวโดยการรวมการทำลายวัตถุและการเริ่มต้นวัตถุ es2015 นี่จะช่วยลดการตรวจสอบด้วยมือแปดหรือเก้าครั้งซึ่งเริ่มจะดูไม่สวยงามหลังจากผ่านไปสักพัก 6 การอัปเกรดบน back4app เมื่อคุณได้ย้ายโค้ดของคุณแล้ว คุณต้องทำอีกสองสิ่งเพื่อให้มันทำงานบน back4app อัปเกรดเวอร์ชันเซิร์ฟเวอร์ back4app ของคุณ อัปโหลดโค้ดคลาวด์ใหม่ของคุณ ฉันได้กล่าวถึงขั้นตอนแรกไปแล้วอย่างสั้น ๆ สิ่งที่คุณต้องทำคือเข้าสู่ระบบ back4app และไปที่แดชบอร์ดของแอปของคุณ จากนั้นเลือก “การตั้งค่าเซิร์ฟเวอร์” ทางด้านซ้าย ตามด้วยปุ่ม “การตั้งค่า” บนการ์ด “จัดการ parse server” คุณสามารถเลือกปุ่มวิทยุ parse server 3 1 1 และกด “บันทึก” สุดท้ายแต่ไม่ท้ายสุด คุณสามารถอัปโหลดโค้ดของคุณผ่าน back4app cli https //blog back4app com/2017/01/20/cli parse server/ , หรือแดชบอร์ดของคุณโดยใช้การอัปโหลดแบบแมนนวล ดู คู่มือนี้ https //www back4app com/docs/android/parse cloud code หากคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนนี้ หมายเหตุเกี่ยวกับการเปิดตัวเวอร์ชันใหม่ หากโค้ดของคุณซับซ้อน อาจเป็นความคิดที่ดีที่จะทำการทดสอบบางอย่างก่อนที่จะทำสองขั้นตอนนี้ back4app มีคู่มือเกี่ยวกับวิธีการทำสิ่งนี้ ที่นี่ และ ที่นี่ สุดท้ายนี้ สิ่งสำคัญที่ต้องทราบคือการเปลี่ยนแปลงเหล่านี้เป็น breaking การใช้โค้ดที่เราเขียนบน parse server 2 x จะล้มเหลว และการใช้โค้ด 2 x บนเซิร์ฟเวอร์ 3 1 ก็จะล้มเหลวเช่นกัน ดังนั้นคุณต้องมั่นใจว่าได้อัปเกรดเวอร์ชัน parse ของ back4app ทันทีเมื่อคุณอัปโหลด cloud code ที่อัปเกรดแล้ว หากคุณมีผู้ใช้จำนวนมากและกังวลเกี่ยวกับการอัปโหลดโค้ดและการอัปเกรดเวอร์ชันที่อาจไม่ตรงกัน คุณสามารถทำสิ่งที่คล้ายกันนี้ได้ 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 } โค้ดนี้จะคำนวณเวอร์ชันโดยอัตโนมัติและกำหนด cloud functions ตามนั้น หลังจากอัปโหลดสิ่งนี้แล้ว คุณจะเปลี่ยนเป็น 3 1 และจากนั้นคุณสามารถอัปโหลดโค้ดใหม่โดยลบส่วนเก่าออก การรวมการตรวจสอบในตอนแรกจะช่วยให้แน่ใจว่าไม่มีจุดใดที่โค้ดของคุณจะล้มเหลว เนื่องจากคุณสามารถอัปเกรดและอัปโหลดภายในไม่กี่วินาที โดยปกติแล้วจึงไม่จำเป็น บทสรุป ในคู่มือนี้ เราได้แสดงให้เห็นอย่างง่ายดายว่าจะแปลง cloud code ของคุณไปยังเวอร์ชัน parse 3 1 ได้อย่างไร อย่าลืมอัปเกรดเวอร์ชัน back4app ของคุณเป็น 3 1 หลังจากที่คุณทำการเปลี่ยนแปลงเหล่านี้ นอกจากนี้ สิ่งสำคัญคือ คู่มือนี้ได้แสดงให้เห็นถึงไวยากรณ์ที่ปรับปรุงแล้วที่ parse 3 1 ใช้ การปรับโครงสร้างของเราลดขนาดโค้ดจาก 160 บรรทัดเหลือ 90 บรรทัดและทำให้มันอ่านง่ายขึ้นมาก สำหรับแอปพลิเคชันจริง สิ่งนี้จะให้ผลตอบแทนที่ดี