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

问题描述 投票:0回答:4

我试图从数据库中获取所有用户,但它显示Model.find()不再接受回调。我无法弄清楚如何从mongodb数据库获取数据。

router.get('/users',(req,res) => {
    User.find({},(err,data) => {
        if(err) throw err;
        res.send(data)
    })
})```

javascript node.js mongodb mongoose mongoose-schema
4个回答
2
投票

这里我们使用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,
  })

1
投票

您可以使用以下方法来代替回调:

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;
  }
});

祝你好运!


0
投票

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);
};

该方法将验证参数,如果传入回调参数,则抛出该错误。


0
投票

在 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;
© www.soinside.com 2019 - 2024. All rights reserved.