Expressjs не позволяет переменным сохранять область видимости, даже если они не являются локальными - PullRequest
0 голосов
/ 23 мая 2018

Я хочу сохранить значения из документа 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 = (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"
}

Любой совет, что я пропускаю?

1 Ответ

0 голосов
/ 23 мая 2018

Поскольку запросу требуется некоторое время, чтобы вернуть данные, поэтому вам необходимо поместить data и res.send в обратный вызов запроса ... Это единственное место, где doc действительно имеет данные ...

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);
    }
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...