Hari 25 (Minggu 5) - Perbedaan tipis antara berikutnya () dan kembali ()

Sebelum merangkum perbedaan antara memanggil next () dan next (), saya ingin meringkas hari itu.

Huddle Jumat kami yang khas terdiri dari beberapa pengumuman, layanan karier, dan beberapa rencana kemajuan serta beberapa presentasi yang kami kerjakan. Dengan memberikan umpan balik kami, kami meningkatkan percakapan kami tentang kode. Saya pikir itu hal yang baik, kami akan senang menghabiskan lebih banyak waktu dengan ini. Salah satu saran saya untuk bergerak maju adalah meninjau kode resmi di Github, mempelajari cara menggunakan alat yang kami gunakan untuk melihat dan menafsirkan kode orang lain di tempat kerja.

Saya mengadakan pertemuan pribadi tentang resume saya dan mengajukan surat kepada perusahaan yang ingin saya ajukan permohonan. Semua orang sangat terorganisir dan sadar untuk bergerak maju. Saya dapat mengatakan bahwa saya memiliki pengalaman dan pengetahuan yang mendalam tentang bagaimana mencari pekerjaan dalam pengembangan perangkat lunak. Saya harap saya bisa mendapatkan informasi ini dan menggunakannya untuk mencari pekerjaan di akhir pelatihan ini.

Tentang perbedaan antara memanggil next () dan next (()) saya pertama kali memperhatikan hal ini beberapa hari yang lalu ketika mengerjakan beberapa kode pekerjaan rumah malam hari. Seperti itu.

app.get ('/ post', function (req, res, next) {Post.findById (1234) .then (function (post, err) {if (error) {return next (err);} if (! post ) {var notFound = Kesalahan baru ('Pesan tidak ditemukan!'); notFound.status = 404; kembali berikutnya (notFound);} res.send (post);});});

Di sini kita melihat permintaan GET di trek / pos. Saat membalas panggilan, sepertinya kami melakukan panggilan ke Post.findById, yang mungkin merupakan permintaan basis data. Karena itu melibatkan menghubungkan ke database dan mengembalikan janji. Lalu jelas - lihat ke dalam fungsi. Secara khusus, kita melihat bahwa jika (kesalahan) benar, kita dipanggil untuk kembali ke (err) berikutnya. Kemudian kita punya yang lain (! Post), ia akan kembali (notFound) dan akhirnya res.send (post), yang akan mengirimkan hasilnya jika kita tidak melakukan kesalahan dan itu berisi beberapa informasi. ). mengembalikan permintaan basis data ke browser.

Dalam contoh lain, saya akan melihat sesuatu yang serupa.

app.get ('/ foo', Periksa CheckRegging (req, res, next) {if (! req.user.registr) {// Pergi ke jalur berikutnya jika pengguna tidak terdaftar // // getRegration gagal. next ('route')}}, fungsi getRegistration (req, res, next) {Register.find (fungsi (kesalahan, data) {jika (err) kembali berikutnya ( err) res.json (data)});});

Dalam contoh ini, kita cukup memanggil ('rute'). Jadi pertanyaan alami adalah: Apa perbedaan antara menggunakan pengembalian?

Seperti yang saya tahu hari ini, panggilan next () dalam rute tidak segera meninggalkan fungsi dan tidak pergi ke rencana perjalanan berikutnya. Dalam hal ini, sisa rute dievaluasi dan karena next () dipanggil, tidak perlu menyelesaikan permintaan, dan kami hanya pergi ke penangan rute pencocokan berikutnya.

Catatan cepat: jika Anda tidak menyelesaikan permintaan di dalam rute, ingatlah bahwa Express tidak mengirim apa pun ke browser dan menggantung Anda.

Jadi, memanggil nomor () berikutnya dari dalam rute hanya memberi tahu Express bahwa sisa rute perlu dilanjutkan dan beralih ke rute yang sesuai berikutnya.

Bandingkan ini dengan memanggil next () pada rute. Perbedaan penting adalah bahwa ketika Anda memanggil next (), eksekusi segera meninggalkan fungsi dan pergi ke rute yang cocok berikutnya. Sepertinya tembakan pengecualian. Sesuatu terjadi di rencana perjalanan kami, dan kami hanya ingin melewatkan kode yang tersisa di rute dan hanya pindah ke rute yang sesuai berikutnya.

Masalah saya adalah mencoba mengirim permintaan ke MongoDB, tempat semua nama pengguna dan kata sandi saya disimpan untuk aplikasi saya. Ketika saya mendapatkan permintaan POST bahwa klien memiliki nama pengguna dan kata sandi yang disediakan olehnya, saya perlu menjalankan kueri untuk melihat apakah ada tautan di database. Ini adalah panggilan asinkron dengan fungsi panggilan balik. Sedangkan untuk Express, itu akan terus mengeksekusi kode saya, menunggu untuk kembali dari database.

Itu berarti itu buruk bagi saya. Ketika Express sedang menunggu untuk kembali dari database, eksekusi sedang berlangsung dan saya akan mulai melihat pesan kesalahan.

Kesalahan: Tidak dapat menginstal tajuk setelah mengirim

Kecepatan Express ini akan berlanjut ketika saya benar-benar tidak menginginkannya. Ketika saya ingin menggunakan return next (), saya menggunakan next ().

Terlalu besar bagi saya untuk menyadari hal itu hari ini. Kagum pada apa perbedaan antara dua lonceng itu, dan menyenangkan untuk menyelesaikan siklus yang dibuka beberapa hari yang lalu. Saya dapat kembali sekarang dan menghapus kode saya untuk proyek ini.

Satu hal terakhir - proyek mingguan baru keluar hari ini. Kami perlu menyandikan halaman web yang memungkinkan Anda memainkan game klasik Hangman. Saya akan melakukannya akhir pekan ini! :-)