【问题标题】:Get data from findOne mongoose inside another findOne function从另一个 findOne 函数中的 findOne mongoose 获取数据
【发布时间】:2021-07-12 11:34:39
【问题描述】:

我正在尝试使用 mongoose 和 nodejs 获取候选人或 HR(用户角色)对象。我有一个用户,两个角色都是从它派生的。

尝试使用唯一用户名和密码进行连接时。结果将发送一个用户对象。我还想发送与该用户相关联的候选人/或 HR。

我通过引用候选/HR 模式来传递用户对象:

   const candidateSchema = new Schema({
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "User",
    index: true,
  },
  fullName: String,
  profilePhoto: String,
  birthday: Date,

我需要在 exec() 函数中获取用户的候选对象。将其保存在变量中并将其作为 res 发送到登录函数

  app.post("/api/auth/signin", (req, res) => {
        User.findOne({
          username: req.body.username,
        })
          .populate("roles", "-__v")
          .exec((err, user) => {
            if (err) {
              res.status(500).send({ message: err });
              return;
            }
            const candi = candidat.findOne({ user: user }).exec((err, candidate) => {
              //I want to save the candidate var 
             }));
            //console.log("res",candi);
            .....
            });

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    一个简单的解决方案是将您的代码包装在一个 Promise 中,并在您想要发送错误时拒绝您想要存储的任何内容到变量中。 但建议您将代码分解为多个异步函数并等待它们,而不是使用回调执行函数。

    app.post("/api/auth/signin", async (req, res) => {
      try{
        let response = await new Promise((resolve,reject)=>{
            User.findOne({
              username: req.body.username,
            })
              .populate("roles", "-__v")
              .exec((err, user) => {
                if (err) {
                  //REJECT ERROR
                  reject(err);
                  return;
                }
                const candi = candidat.findOne({ user: user }).exec((err, candidate) => {
                  //RESOLVE YOUR CANDIDATE
                  resolve(canditate);
                 }));
                //console.log("res",candi);
                .....
                });
            .... your rest of code
         }) 
    
         res.send(response) // or required json
      }catch(err){
        res.status(500).send({ message: err });
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-18
      • 2021-12-04
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 2015-10-26
      相关资源
      最近更新 更多