Mongodb expressjs不允许变量保留作用域,即使它们不是本地变量
我希望保留mongoDB文档中的值,以将它们作为响应返回。代码如下所示:Mongodb expressjs不允许变量保留作用域,即使它们不是本地变量,mongodb,express,mongoose,Mongodb,Express,Mongoose,我希望保留mongoDB文档中的值,以将它们作为响应返回。代码如下所示: exports.UserDiseaseInfo = (req, res, next) => { let retval = {}; let dId = ""; let subDName = ""; let body = req.body; let UId = (body.UId != undefined) ? body.UId : false; let SubDId =
exports.UserDiseaseInfo = (req, res, next) => {
let retval = {};
let dId = "";
let subDName = "";
let body = req.body;
let UId = (body.UId != undefined) ? body.UId : false;
let SubDId = (body.SubDId != undefined) ? body.SubDId : false;
if (UId == false || SubDId == false) {
res.status(404).send({
response: "Fail",
body: req.body
});
}
subDisease_model.findById(SubDId, function(error, doc) {
dId = doc['DiseaseID'];
subDName = doc['SubDisease'];
});
let data = {
response: 'success',
subDisease: subDName,
DiseaseId: dId
}
res.status(200).send(data);
};
However the output is:
{
"response": "success",
"subDisease": "",
"DiseaseId": ""
}
然而它应该是
{
"response": "success",
"subDisease": "Migraine",
"DiseaseId": "5ad0850efdcab0ab875c48a4"
}
有什么建议我遗漏了什么吗?因为查询需要一些时间才能返回数据,这就是为什么您需要将
数据
和res.send
放在查询回调中的原因。。。这是唯一一个真正有数据的地方
exports.UserDiseaseInfo = (req, res, next) => {
let retval = {};
let dId = "";
let subDName = "";
let body = req.body;
let UId = (body.UId != undefined) ? body.UId : false;
let SubDId = (body.SubDId != undefined) ? body.SubDId : false;
if (UId == false || SubDId == false) {
res.status(404).send({
response: "Fail",
body: req.body
})
}
subDisease_model.findById(SubDId, function(error, doc) {
if (error) {
let data = {
response: 'false',
subDisease: "",
DiseaseId: ""
}
return res.status(404).send(data);
} else {
dId = doc['DiseaseID'];
subDName = doc['SubDisease'];
let data = {
response: 'success',
subDisease: subDName,
DiseaseId: dId
}
return res.status(200).send(data);
}
})
}
@Ashish请详细说明请修复代码中的缩进,因为它不是真正可读的。请将
数据的定义和res.send()
放在回调中。这是数据库结果唯一可用的地方。在执行res.send()
之后很长一段时间,就会调用回调函数,因此变量还没有值。数据库调用是非阻塞的。这意味着代码将在继续运行并在稍后调用回调后继续运行。如果您的代码格式正确,这一点会更加明显。@jfriend00您介意帮我写一点代码吗?我不知道那个注释是什么意思?你在这里提问,我们会尽力帮助你。这就是我对上一条评论所做的。如果出现错误if(error){…}
,也需要进行错误处理。还需要在前面的res.status(404.send()
@Ashish之后返回
,谢谢您的帮助。但是,如果我想使用回调之外的任何数据值,该怎么办?非常感谢您的时间和帮助。@Satya-您不能在回调之外使用它们,除非您将它们传递给从回调中调用的函数。这就是node.js中异步编程的工作原理。@jfriend00,我欠你一个熊人。无论何时!!:)非常感谢。