从另一个 findOne 函数中的 findOne mongoose 获取数据
Posted
技术标签:
【中文标题】从另一个 findOne 函数中的 findOne mongoose 获取数据【英文标题】:Get data from findOne mongoose inside another findOne function 【发布时间】: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);
.....
);
【问题讨论】:
【参考方案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 );
【讨论】:
以上是关于从另一个 findOne 函数中的 findOne mongoose 获取数据的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose 中的 Model.findOne() 和 Model.findById() 有啥区别?
FindOne 没有正确找到数组中的项目 discordjs