Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose Schema.pre-insertMany中间件_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js Mongoose Schema.pre-insertMany中间件

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

我将mongoose与nodeJs结合使用,并尝试在使用insertMany时实现一个称为的中间件。 在mongoose文档中根本没有示例,但它们确认insertMany模型函数 触发以下中间件:insertMany()

我有一个基本的用户模式,需要插入许多钩子来使用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();
});
我不会发布所有的模式,因为其余的都可以,包括密码散列和“保存”挂钩。 当我尝试插入许多用户时,我无法理解为什么会出现此错误:

下一步不是功能

通常我调用next()继续下一个中间件,但在这种情况下它不起作用。 如果我删除next(),代码将不会进入下一个中间件,并且在这两种情况下都不会插入用户


有人能帮我吗?

这是因为您在回调中提供了错误的参数。钩子仅应用“下一个”参数。您需要将回调函数参数从(err,docs,next)更改为(next,docs),它应该适合您

您可以在这里看到详细信息


谢谢你的回答。请问,你在哪里找到了这些论点?在mongoose文档中,顺序是next作为第二个参数,而不是第一个参数。在我发送的链接中,您可以看到他们使用next作为第一个参数。在该链接中,与文档的其余部分一样,根本没有关于insertMany hook的示例。不管怎样,你的建议有效:)谢谢!从mongoose 5.10.8开始,我必须做(文档,下一个)才能让它工作:(下一个,文档)是错误的。