开发者问题收集

变量 id 未在 moongoose 函数 NODE JS 之外定义

2020-01-29
75

我想将两个不同的值分配给同一个变量,这取决于 moongose 查询的结果,但是我得到了这个错误

events.js:187
      throw er; // Unhandled 'error' event
      ^

ReferenceError: barberInfo is not defined

这是我在 node js 中的代码

barber.findOne({id:idBarber},function(err,response){
        if(response){
          //if barber exists in the database 
          barberInfo =response.toJSON();
        }else{
          //if no exists in the database
          barberInfo={
            id:0,
            stairs:0.0,
            numberServices:0,
            urlImg: "https://i.pinimg.com/736x/a4/93/25/a493253f2b9b3be6ef48886bbf92af58.jpg",
            name: "Sin",
            lastName : "Asignar",
            phone : "000-000-0000"
          }
        }
      });
console.log(barberInfo);

我在两种情况下定义了变量,我该如何定义它?

3个回答

在 Javascript 中, var 是“函数作用域”。因此, barberInfo 的作用域是回调函数。该变量不能在函数外部访问。

您尝试执行的操作是打印 response 的值。您必须在回调函数内部执行此操作。如果您在外部执行此操作,它将立即执行,并且您将无法获得预期的结果。因此,以下代码将给出“ 错误结果 ”。

let response = null; // define response variable

collection.findOne({id:searchId}, function(err, result) {
  response = result;
});

console.log(response); //this line will be executed immediately after "findOne" call. 
                       //It will not wait for the callback function execution.

尝试使用承诺编写代码。

collection.findOne({id:searchId}).then(result => {
  console.log(result);
  return result;
}).catch(err => {
  //handle error
});
Aditya Bhave
2020-01-29

barberInfo 未定义,您需要在分配任何值之前定义它。

barber.findOne({id:idBarber},function(err,response){
        let barberInfo;
        if(response){
          //if barber exists in the database 
          barberInfo =response.toJSON();
        }else{
          //if no exists in the database
          barberInfo={
            id:0,
            stairs:0.0,
            numberServices:0,
            urlImg: "https://i.pinimg.com/736x/a4/93/25/a493253f2b9b3be6ef48886bbf92af58.jpg",
            name: "Sin",
            lastName : "Asignar",
            phone : "000-000-0000"
          }
        }
        console.log(barberInfo);
      });
Balaj Khan
2020-01-29

barberInfo 变量未在回调函数外定义。您需要将行: console.log(barberInfo); 移到回调函数内

Nadir Latif
2020-01-29