‫Instruktur: Sama seperti
‫Express, Mongoose juga memiliki konsep middleware.
‫Jadi sekarang mari kita belajar
‫tentang jenis middleware pertama, yaitu document middleware.
‫Sekarang, seperti halnya Express, kita dapat menggunakan
‫middleware Mongoose untuk membuat sesuatu terjadi di
‫antara dua peristiwa.
‫Misalnya, setiap kali dokumen baru disimpan
‫ke database, kita dapat menjalankan
‫fungsi antara perintah simpan yang dikeluarkan dan penyimpanan
‫dokumen yang sebenarnya, atau juga setelah penyimpanan yang sebenarnya.
‫Dan itulah alasan mengapa middleware
‫luwak juga disebut pre dan post hooks.
‫Jadi sekali lagi, karena kita bisa
‫mendefinisikan fungsi untuk dijalankan sebelum atau sesudah kejadian tertentu,
‫seperti menyimpan dokumen ke database.
‫Jadi middleware adalah konsep yang sangat mendasar di Mongoose,
‫sama seperti di Express.
‫Dan ada banyak kemungkinan
‫dan kasus penggunaan untuk middleware, dan kami
‫akan menggunakan middleware sepanjang waktu dalam proyek ini.
‫Jadi ada empat jenis middleware di
‫Mongoose: dokumen, query, agregat, dan middleware model.
‫Dan pada kuliah kali ini,
‫kita akan membahas tentang document middleware,
‫yaitu middleware yang dapat bertindak pada dokumen yang sedang diproses.
‫Jadi seperti properti virtual, kami
‫mendefinisikan middleware pada skema,
‫jadi tourSchema. pra.
‫Jadi ini untuk pra middleware, yang sekali lagi,
‫akan dijalankan sebelum acara yang sebenarnya.
‫Dan event tersebut dalam hal ini adalah event save.
‫Dan fungsi panggilan balik ini
‫yang akan kita
‫definisikan
‫selanjutnya, jadi fungsi ini akan dipanggil sebelum dokumen
‫sebenarnya disimpan ke database.
‫Jadi ini adalah middleware dokumen, dan ini berjalan,
‫izinkan saya menulis semuanya di sini.
‫Jadi itu berjalan sebelum perintah simpan
‫dan . membuat perintah.
‫Tapi tidak di insert banyak.
‫Jadi jika kita menggunakan perintah ini di sini, jadi insertMany, maka
‫itu sebenarnya tidak akan memicu save middleware.
‫Jadi selalu ingat itu.
‫Sangat penting untuk menyadari bahwa hanya pada save
‫and on create sebenarnya middleware ini
‫akan dieksekusi.
‫Jadi mari kita mulai dengan membuat konsol sederhana. log dan apa
‫yang akan saya log melalui konsol adalah ini.
‫Jadi di save middleware, kata kunci disk di sini
‫akan menunjuk ke dokumen yang sedang diproses.
‫Dan itulah alasan mengapa disebut dokumen middleware.
‫Sekali lagi, karena dalam fungsi
‫ini, kita memiliki akses ke dokumen yang sedang diproses.
‫Jadi dalam hal ini, dokumen yang sedang disimpan.
‫Jadi izinkan saya dengan cepat menunjukkannya kepada Anda menggunakan
‫konsol ini. catatan.
‫Jadi untuk sekarang memicu fungsi
‫ini, ingat kita perlu menjalankan perintah simpan atau perintah buat.
‫Jadi sekarang kita perlu membuat tur baru menggunakan API
‫kita untuk, ya, kemudian memicu middleware ini.
‫Jadi mari kita pergi ke sini, ke tukang pos, dan saya akan
‫mulai dengan menyimpan dua rute baru
‫yang kita buat di kuliah sebelumnya, jadi dapatkan rencana bulanan.
‫Dan yang ini di sini adalah mendapatkan statistik tur.
‫Jadi sekarang saya bisa menutupnya dan membuat tur baru.
‫Dan kami menentukan data di sini di tubuh.
‫Sekarang tidak semua barang di sini benar-benar diperlukan,
‫jadi mari kita lihat apa yang
‫sebenarnya diperlukan dan singkirkan sisanya.
‫Jadi imageCover diperlukan,
‫ringkasannya, tentu saja harganya, dan ya.
‫Jadi mari kita singkirkan barang-barang yang
‫sebenarnya tidak kita butuhkan di sini hanya untuk meminimalkannya.
‫Jadi peringkat, kuantitas, rata-rata, jadi ini
‫tidak perlu.
‫Jadi saya hanya akan menyebut
‫yang ini di sini sebagai tur uji coba, agar tetap sederhana di sini.
‫Sekarang mari kita kirim permintaan ini dan memang, itu
‫membuat dokumen baru dan sekarang mari
‫kita lihat konsol kita dan lihat dokumen itu di sini.
‫Dan memang, ini dia.
‫Jadi mari kita tingkatkan ini di
‫sini sedikit dan jadi seperti inilah tampilan
‫dokumen kita tepat sebelum disimpan ke dalam database.
‫Jadi di sini kami memiliki peringkat Rata-rata dan kuantitas,
‫yang ditetapkan secara default.
‫Ingat, jadi 4. 5 dan nol, dan
‫kemudian stempel waktu yang dibuat, dan Anda bahkan dapat
‫melihat properti virtual yang kami definisikan di sini.
‫Jadi sekali lagi, ini benar sebelum kita benar-benar
‫menyimpan data ini ke database.
‫Jadi pada saat ini,
‫kita masih dapat bertindak berdasarkan data sebelum disimpan ke
‫database dan itulah yang akan kita
‫lakukan sekarang.
‫Jadi di sini di fungsi middleware kami.
‫Dan yang ingin saya lakukan di sini adalah
‫membuat slug untuk setiap dokumen ini.
‫Jadi ingat bagaimana di bagian pertama,
‫kami membuat slug untuk setiap produk yang
‫kami miliki di toko.
‫Jadi slug pada dasarnya hanyalah sebuah string
‫yang dapat kita masukkan ke dalam URL, biasanya berdasarkan
‫beberapa string seperti namanya.
‫Jadi dalam hal ini, kita akan membuat
‫slug berdasarkan nama turnya.
‫Jadi ingat bagaimana untuk itu kami menggunakan paket slugify.
‫Jadi sekarang mari kita lanjutkan dan instal itu.
‫Baiklah, dan sementara itu, mari
‫kita lanjutkan dan kemudian memintanya di sini.
‫Jadi butuh slugify.
‫Mari kita kembali ke jendela pertama kita di sini, sebenarnya.
‫Dan sekarang, di bawah sini, kami tidak
‫lagi ingin mencatat ini ke konsol.
‫Tapi sebaliknya kita sekarang bisa mengatakan ini, dan
‫ingat, ini adalah dokumen yang sedang diproses.
‫Jadi sekarang kita dapat mendefinisikan properti baru di atasnya.
‫Dan itulah yang saya lakukan.
‫Jadi ini. slug harus slugify, dan
‫kemudian hanya string yang ingin kita
‫buat dari slug, dan jadinya seperti ini. nama dan kemudian kami juga ingin
‫memberikan opsi bahwa semuanya
‫harus dikonversi ke huruf kecil, dan
‫itu lebih rendah: benar, dan sekarang saya akan menyimpannya.
‫Dan satu hal yang
‫belum kita bicarakan adalah fungsi selanjutnya.
‫Jadi seperti di Express, kita juga memiliki fungsi berikutnya di mMngoose
‫middleware, pada dasarnya untuk memanggil middleware berikutnya di
‫stack seperti yang sudah kita ketahui.
‫Sekarang dalam kasus ini, kami hanya memiliki satu fungsi
‫middleware, itulah sebabnya kami tidak mengalami
‫masalah, bahkan tidak memanggil berikutnya, tetapi sekarang mari kita lakukan itu.
‫Dan setiap fungsi middleware, dalam
‫pre save middleware memiliki akses ke berikutnya.
‫Jadi itu persis sama seperti di Express,
‫dan pada akhir middleware kita memanggil next, dan
‫itu akan memanggil middleware berikutnya
‫di stack.
‫Jadi mari kita coba ini lagi.
‫Dan ini akan disebut tur uji coba nomor dua.
‫Sangat sederhana, kirim ke langit,
‫dan mari kita tunggu.
‫Dan sekarang untuk beberapa alasan, itu tidak benar-benar ada di sini.
‫Mari kita lihat apakah ada
‫kesalahan, dan sebenarnya tidak.
‫Tetapi alasan mengapa itu tidak berfungsi
‫adalah karena saat ini kami tidak memiliki siput dalam skema kami.
‫Dan ingat ini benar-benar terjadi pada kami sebelumnya ketika
‫kami hanya memiliki beberapa bidang dalam skema.
‫Dan ketika kami, maka kami akan
‫mendefinisikan beberapa bidang yang tidak ada dalam
‫skema, lalu bidang itu tidak disimpan ke database.
‫Dan hal yang sama sekarang terjadi di
‫sini, jadi kami mendefinisikan properti slug, tetapi itu tidak ada dalam skema kami.
‫Dan karena itu tidak disimpan ke database, jadi mari kita
‫cepat memperbaikinya dan mari kita taruh, oh, saya
‫tidak tahu, itu tidak terlalu penting,
‫dapat meletakkannya di sini
‫tepat setelah nama, jadi siput harus hanya menjadi string.
‫Dan itu harus memperbaikinya.
‫Jadi mari kita kembali dan membuat tur uji coba nomor tiga.
‫Karena tidak bisa sama, karena ingat kita tidak
‫bisa mengadakan tour dengan nama yang sama.
‫Jadi lakukan lagi, dan sekarang memang kami memiliki properti slug di
‫sini dan itu memang berdasarkan namanya, seperti yang Anda
‫lihat di sini.
‫Bagus, jadi mari kita kembali ke sini,
‫akan mengurangi ini sedikit.
‫Jadi di sini kita memiliki middleware pra dokumen.
‫Sekarang mari kita bereksperimen dengan sangat cepat, juga,
‫dengan sebuah post middleware.
‫Jadi turSchema. posting dan mari gunakan save lagi.
‫Dan kemudian fungsi callback, yang dalam kasus post
‫middleware memiliki akses tidak
‫hanya ke next, tetapi juga ke
‫dokumen yang baru saja disimpan ke database.
‫Jadi mari kita sebut itu satu doc dan kemudian berikutnya.
‫Dan fungsi post middleware
‫dijalankan setelah semua fungsi pre
‫middleware selesai, baiklah.
‫Jadi di sini kita sebenarnya tidak lagi memiliki kata kunci disk, tetapi
‫sebagai gantinya kita memiliki dokumen yang pada dasarnya
‫sudah selesai di sini di doc.
‫Jadi mari kita log dokumen yang sudah selesai
‫ke konsol dan kemudian panggil berikutnya.
‫Sekarang dalam kasus ini lagi,
‫kami hanya memiliki satu middleware pos dan jadi kami tidak
‫benar-benar membutuhkan yang berikutnya, tetapi praktik terbaik untuk selalu menyertakannya.
‫Sekarang hal lain yang ingin saya tunjukkan kepada Anda adalah
‫bahwa kita dapat memiliki, tentu saja,
‫beberapa pra middlewares atau juga mengirim middlewares untuk hook yang sama.
‫Dan hook adalah apa yang kami sebut simpan di sini.
‫Jadi middleware di sini pada dasarnya
‫adalah apa yang kita sebut hook pra-penyimpanan.
‫Jadi Anda akan melihat terminologi itu sepanjang waktu.
‫Jadi ada yang menyebutnya middleware, dan ada yang menyebutnya hook.
‫Jadi ini akan menjadi pre save hook
‫atau pre save middleware.
‫Jadi fungsinya, dan yang ini memiliki akses ke berikutnya.
‫Jadi mari kita log sesuatu
‫ke konsol di sini, seperti akan menyimpan dokumen.
‫Dan kemudian berikutnya, dan itu tentu saja, harus berikutnya.
‫Hanya untuk melihat apakah kita mendapatkan beberapa
‫kesalahan, saya akan menghilangkan yang berikutnya di sini.
‫Hanya untuk melihat apa yang terjadi ketika kita tidak menyebutnya.
‫Jadi saya akan membuat tur
‫baru, dan di akhir kuliah ini saya
‫akan menghapus semuanya, tapi untuk saat ini kita membutuhkannya di sini.
‫Dan sekarang Anda melihat bahwa itu tidak benar-benar selesai, jadi
‫kita terjebak dalam satu fungsi middleware yang
‫tidak memiliki panggilan berikutnya.
‫Jadi pada dasarnya kita terjebak di sini.
‫Jadi, mari batalkan
‫permintaan dan dapatkan kembali di sini, dan
‫coba lagi.
‫Dan sekarang itu benar-benar berhasil.
‫Jadi slug kami ada di sini, kan, jadi mari
‫kita lihat konsol kami, dan memang,
‫pra middleware kedua kami juga berjalan, jadi yang
‫logging akan menyimpan dokumen dan kemudian
‫middleware posting kami kemudian masuk ke konsol dokumen
‫terakhir, dan itu juga
‫harus sudah memiliki siput dan ya, ini dia.
‫Dan hanya itu yang harus
‫saya tunjukkan kepada Anda tentang middleware dokumen.
‫Sekarang saya hanya akan mengomentari keduanya di sini
‫karena saya tidak ingin mengotori log saya di sini sepanjang waktu
‫dengan konsol ini. log, tapi saya
‫masih menyimpannya di sini, sekali lagi,
‫sebagai referensi.
‫Jadi yang saya ingin Anda ingat dari kuliah
‫ini adalah bahwa kita dapat menjalankan middleware
‫sebelum dan sesudah peristiwa tertentu.
‫Dan dalam kasus document
‫middleware, event tersebut biasanya adalah event save.
‫Dan kemudian dalam fungsi middleware itu sendiri, kita
‫memiliki akses ke kata kunci
‫disk, yang akan menunjuk pada dokumen yang sedang disimpan.
‫Dan juga sangat penting untuk
‫diingat bahwa save middleware ini hanya berjalan untuk metode save
‫and create Mongoose.
‫Itu tidak akan berjalan, misalnya, untuk memasukkan banyak dan
‫juga tidak untuk menemukan satu dan memperbarui
‫atau menemukan dengan ID dan memperbarui, yang sudah kita gunakan sebelumnya.
‫Jadi misalnya, kita di suatu tempat di sini
‫kita memiliki findByIdAndUpdate, tapi itu tidak akan memicu
‫save middleware ini.
‫Jadi itu sangat penting untuk diingat
‫karena sebenarnya sedikit kemudian
‫dalam proyek ini, kita harus mengatasi batasan itu.
‫Baiklah, jadi ini adalah
‫middleware dokumen untuk memanipulasi dokumen yang sedang disimpan.
‫Selanjutnya, kita akan berbicara tentang middleware query.