Mongoose Schema.pre insert Banyak middleware
Saya menggunakan luwak dengan nodeJs dan saya mencoba mengimplementasikan middleware yang dipanggil saat menggunakan insertMany. Dalam dokumentasi mongoose tidak ada contoh sama sekali, tetapi mereka mengkonfirmasi bahwa fungsi model insertMany memicu middleware berikut: insertMany ().
Saya memiliki skema Pengguna dasar dan saya perlu memasukkan banyak kait untuk hash kata sandi dengan bcrypt:
UserSchema.pre('insertMany', async function (err, docs, next) {
try{
docs.map(async function (doc, index) {
// async hash password
doc.password = await User.hashPassword(doc.password);
});
} catch (error) {
console.log(error);
}
next();
});
Saya tidak memposting semua skema karena yang lainnya berfungsi, termasuk hashing kata sandi dan kait 'simpan'. Saya tidak mengerti mengapa saya mendapatkan kesalahan ini ketika saya mencoba memasukkan banyak pengguna:
selanjutnya bukan fungsi
Biasanya saya memanggil next () untuk melanjutkan ke middleware berikutnya, tetapi dalam kasus ini tidak berhasil. Jika saya menghapus next (), kode tidak akan melanjutkan ke middleware berikutnya dan dalam kedua kasus pengguna tidak dimasukkan.
Bisakah seseorang membantu saya?
Jawaban
Itu karena Anda memberikan argumen yang salah dalam callback. Hook hanya menerapkan argumen 'berikutnya'. Anda perlu mengubah argumen fungsi panggilan balik Anda dari (err, docs, next) menjadi (next, docs) dan itu akan bekerja untuk Anda.
Detailnya bisa Anda lihat di sini https://mongoosejs.com/docs/middleware.html#pre
https://mongoosejs.com/docs/middleware.html#types-of-middleware