我如何将文档返回到我的API电话



我试图从 app.get("/api/radar_cloning调用方法 get_radar_life_cycle,并抛出下面显示的错误错误是来自return done(null,documents)行的错误,如何返回documents返回我的API调用?

方法: -

let get_cloned_radars = function(documents, done) { 
let complete_radar_list=[]
  for (let i = 0; i < documents.length; i++) {         
    complete_radar_list.push(documents[i]['orgRadar']);
      for (let j = 0; j < documents[i]['clonedRadarsdetailslist'].length; j++) { 
        complete_radar_list.push(documents[i]['clonedRadarsdetailslist'][j]['clonedRadar']);
      }
  }
  data = complete_radar_list 
  return done(null, data)
}
let get_radar_life_cycle = function(data,done) {
   console.log("data after get_radar_life_cycle") 
   console.log(data)
   Radar_life_cycle.find({orgRadar: {$in:data}})
   .then(documents => {
    console.log(documents) --> shows correct data
    });
  return done(null,documents) --> Error is coming from this line
 };

API调用:

 app.get("/api/radar_cloning", (req, res, next) => {
   Radar_cloning.find({orgRadar: {$in:req.query.params.split(',')}})
   .then(documents => {
      get_cloned_radars(documents, function(err,data) { 
      if (err) {
        res.json(err);
      if (data!=null){
        console.log(data)
        }//end for data
      }//end of (Err)
    });//get_cloned_radars
      get_radar_life_cycle(data, function(err,radar_life_cycle_data) { 
      if (err) {
        res.json(err);
        console.log(radar_life_cycle_data)
        }//end for radar_life_cycle_data
      }//end of (Err)
  });//end of get_radar_life_cycle
});
 });

错误: -

(node:10065) UnhandledPromiseRejectionWarning: ReferenceError: documents is not defined

您正在尝试在其范围之外访问文档,范围是{}之间的所有内容。因此,您无法在.then(() => {})范围下方访问它。

幸运的是,您正在提供称为done(err, radar_life_cycle_data)的回调函数,您可以在get_radar_life_cycle(documents, done)函数范围的任何地方使用它。甚至范围内的范围。当您调用完成的函数时,您基本上要做的就是调用此功能(嗯,它有一些语法错误,所以我对其进行了清理(

function(err,radar_life_cycle_data) { 
    if (err) {
        res.json(err);
        console.log(radar_life_cycle_data)
    }
}//end for radar_life_cycle_data

然后执行

所以解决方案:

.then(() => {})范围内移动您的完成:

let get_radar_life_cycle = function(data,done) {
    console.log("data after get_radar_life_cycle") 
    console.log(data)
    Radar_life_cycle.find({orgRadar: {$in:data}})
    .then(documents => {
        console.log(documents) // --> shows correct data
        done(null,documents) // --> No error coming from this line
    });
};

data也没有在get_cloned_radars

的范围内
app.get("/api/radar_cloning", (req, res, next) => {
    Radar_cloning.find({orgRadar: {$in:req.query.params.split(',')}})
    .then(documents => {
        get_cloned_radars(documents, function(err,data) { 
            if (err) {
                res.json(err);
                if (data!=null) {
                    console.log(data)
                    get_radar_life_cycle(data, function(err,radar_life_cycle_data) { 
                        if (err) {
                            res.json(err);
                            console.log(radar_life_cycle_data)
                         } //end of (Err)
                    }); //end of get_radar_life_cycle
                } //end for data
            } //end of (Err)
    }); //get_cloned_radars
 });

但是,由于您的代码不可读,这是一个清理版本:

app.get("/api/radar_cloning", (req, res, next) => {
    const radar_life_cycle_cb = function (err, data) {
        if (err) {
            res.json(err);
            return;
        }
        console.log(data);
    }
    const cloned_radar_cb = function (err, data) {
        if (err) {
            res.json(err);
            return;
        }
        if (data != null) {
            get_radar_life_cycle(data, radar_life_cycle_cb);
        }
    };
    Radar_cloning.find({orgRadar: {$in:req.query.params.split(',')}})
    .then(documents => get_cloned_radars(documents, cloned_radar_cb));
}

相关内容

  • 没有找到相关文章

最新更新