Node.js Mongoose Schema.pre-insertMany中间件
我将mongoose与nodeJs结合使用,并尝试在使用insertMany时实现一个称为的中间件。 在mongoose文档中根本没有示例,但它们确认insertMany模型函数 触发以下中间件:insertMany() 我有一个基本的用户模式,需要插入许多钩子来使用bcrypt散列密码:Node.js Mongoose Schema.pre-insertMany中间件,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我将mongoose与nodeJs结合使用,并尝试在使用insertMany时实现一个称为的中间件。 在mongoose文档中根本没有示例,但它们确认insertMany模型函数 触发以下中间件:insertMany() 我有一个基本的用户模式,需要插入许多钩子来使用bcrypt散列密码: UserSchema.pre('insertMany', async function (err, docs, next) { try{ docs.map(async function (doc
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();
});
我不会发布所有的模式,因为其余的都可以,包括密码散列和“保存”挂钩。
当我尝试插入许多用户时,我无法理解为什么会出现此错误:
下一步不是功能
通常我调用next()继续下一个中间件,但在这种情况下它不起作用。
如果我删除next(),代码将不会进入下一个中间件,并且在这两种情况下都不会插入用户
有人能帮我吗?这是因为您在回调中提供了错误的参数。钩子仅应用“下一个”参数。您需要将回调函数参数从(err,docs,next)更改为(next,docs),它应该适合您 您可以在这里看到详细信息
谢谢你的回答。请问,你在哪里找到了这些论点?在mongoose文档中,顺序是next作为第二个参数,而不是第一个参数。在我发送的链接中,您可以看到他们使用next作为第一个参数。在该链接中,与文档的其余部分一样,根本没有关于insertMany hook的示例。不管怎样,你的建议有效:)谢谢!从mongoose 5.10.8开始,我必须做(文档,下一个)才能让它工作:(下一个,文档)是错误的。