Mongoose Schema.pre insertMany 中间件

4

我正在使用Node.js的Mongoose,并尝试实现一个中间件,当使用insertMany时调用。

Mongoose文档中没有任何示例,但他们确认insertMany模型函数会触发以下中间件:insertMany()。

我有一个基本的用户架构,并需要使用bcrypt散列密码的insertMany钩子:

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() 来继续执行下一个中间件,但在这种情况下不起作用。 如果我删除 next(),代码将不会继续执行下一个中间件,在两种情况下都无法插入用户。
有人能帮帮我吗?
1个回答

3

1
谢谢你的回答。请问你在哪里找到这些参数的说明?在 Mongoose 文档中第二个参数是 next,而不是第一个参数。 - crivella
在我发送的链接中,您可以看到他们将next用作第一个参数。 - Pavlo Kostohrys
3
在那个链接中,就像文档的其余部分一样,根本没有关于insertMany钩子的示例。不管怎样,您的建议有效 :) 谢谢! - crivella
3
从mongoose 5.10.8开始,我必须执行(docs, next)才能使其工作:(next, docs)是错误的。 - Stefano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接