我试图从数据库中获取所有用户,但它显示Model.find()不再接受回调。我无法弄清楚如何从mongodb数据库获取数据。
router.get('/users',(req,res) => {
User.find({},(err,data) => {
if(err) throw err;
res.send(data)
})
})```
这里我们使用asyncawait来解决这个问题
也不要轻易承诺
const data = await Model.find()
router.get('/allUsers', async (req, res) => {
const allUsers = await User.find()
res.status(200).send({
status: 'Success',
data: allUsers,
})
您可以使用以下方法来代替回调:
router.get('/users',(req,res) => {
User.find({}).then(
data => res.send(data)
).catch(
err => throw err
);
});
或使用异步/等待:
router.get('/users', async (req,res) => {
try {
const data = await User.find({});
res.send(data);
} catch (err) {
throw err;
}
});
祝你好运!
migration_to_7.html#dropped-callback-support:
Model.find
方法不再接受回调。它总是返回一个承诺。您可以使用 async/await
或 .then()/.catch()
方法来处理 Promise,例如:
try {
cont res = await User.find({})
} catch(e) {
console.error(e)
}
您可以在上面的链接中找到方法列表。我们也来看看Model.find()
方法的
源代码:
Model.find = function find(conditions, projection, options) {
_checkContext(this, 'find');
if (typeof arguments[0] === 'function' || typeof arguments[1] === 'function' || typeof arguments[2] === 'function' || typeof arguments[3] === 'function') {
throw new MongooseError('Model.find() no longer accepts a callback');
}
const mq = new this.Query({}, {}, this, this.$__collection);
mq.select(projection);
mq.setOptions(options);
return mq.find(conditions);
};
该方法将验证参数,如果传入回调参数,则抛出该错误。
在 models.js 文件中添加 New 关键字。这对我有用
const mongoose = require("mongoose");
const urlSchema = new mongoose.Schema(
{
shortId: {
required: true,
unique: true,
type: String,
},
redirectURL: {
type: String,
required: true,
},
visitHistory: [
{
timestamp: {
type: Number,
},
},
],
},
{
timestamps: true,
}
);
const URL = mongoose.model("url", urlSchema);
module.exports = URL;