Mongoose 停止接受某些函数的回调

pab*_*ezr 19 javascript mongoose mongodb express

我已经使用 .save() 和 .findOne() 回调几天了,就在今天我遇到了这些错误:

throw new MongooseError('Model.prototype.save() no longer accepts a callback')

MongooseError: Model.prototype.save() no longer accepts a callback
Run Code Online (Sandbox Code Playgroud)

MongooseError: Model.findOne() no longer accepts a callback

鉴于至少在.findOne() 的文档中仍然接受回调,这真的很尴尬。

app.post("/register", (req, res) => {
    const newUser = new User({
        email: req.body.username,
        password: req.body.password
    });

    newUser.save((err) => {
        if (err) console.log(err)
        else res.render("secrets");
    });
});
Run Code Online (Sandbox Code Playgroud)

这曾经对我有用,使用express和mongoose。请让我知道如何解决它。

小智 29

MongooseError:Model.find() 不再接受回调

由于回调函数从现在开始已被弃用。如果您将这些函数与回调一起使用,请使用 async/await 或在异步函数不适合您时使用 Promise。

app.get("/articles", async (req, res) => {
  try {
    const articles = await Article.find({ });
    res.send(articles);
    console.log(articles);
  } catch (err) {
    console.log(err);
  }
});
Run Code Online (Sandbox Code Playgroud)


小智 19

// old way (deprecated)

Model.find(function(err, models){
  if (err) {
    console.log(err);
  }else {
    console.log(models);
  }
});


// new way

Model.find()
.then(function (models) {
  console.log(models);
})
.catch(function (err) {
  console.log(err);
});
Run Code Online (Sandbox Code Playgroud)


小智 9

Mongoose 刚刚进行了新的更新,Mongoose 现在已经摆脱了回调。所以这意味着,现在而不是这样做

//Old way ( doesn't work anymore )

data.save((err, result) => {
   if(!err) console.log(result);
})
Run Code Online (Sandbox Code Playgroud)

你应该这样做!

//New way ( use this in your projects )

let output;
(async () => {
   output = await data.save();
})
console.log(output);
Run Code Online (Sandbox Code Playgroud)

这也适用于所有其他猫鼬回调