嵌套在回调中的Node.js函数返回未定义的错误

时间:2017-03-23 22:11:11

标签: node.js callback routing nested

我正在处理一个路由,返回一个数组,其中包含对数据库的两次单独调用的结果。我在模型函数中调用的函数单独按预期工作。但是,当我尝试通过在第一个回调中调用第二个函数来组合它时,我收到第二个函数“不是函数”的错误。这是我的列表路线中的代码。注意util和errorhandler是我创建的文件,用于帮助返回格式,不应该影响此错误。任何帮助解决这个问题将不胜感激,谢谢!

路线/清单

router.route("/list/:id").get(function(req, res) {
 list.getListMovie(req.params.id, function(err, list) {
 if (err) {
  res.json(errorHandler.handleDatabaseErrors(err));
  return;
 }
 var response = [];
 response["movies"] = list;
 console.log(response)
 list.getListTV(req.params.id, function(err, list1) {
   if (err) {
     res.json(errorHandler.handleDatabaseErrors(err));
     return;
    }
   response["tv"] = JSON.parse(list1);
   console.log(response)
   res.json(utils.returnFormatForDB(response));
   });
  });
});

models / list

中的函数定义
exports.getListTV = function(userid, done) {
 db.get().query('SELECT `idmedia`, `rating`, `title`, `poster_path` FROM 
 `list` JOIN `tv` ON list.idmedia = tv.tv_id WHERE list.idusers = ?', userid, 
 function(err, rows) {
   if (err) return done(err);
   done(null, rows);
 });
}

exports.getListMovie = function(userid, done) {
 db.get().query('SELECT `idmedia`, `rating`, `title`, `poster_path` FROM 
 `list` JOIN `movies` ON list.idmedia = movies.movie_id WHERE list.idusers = 
 ?', userid, function(err, rows) {
  if (err) return done(err);
  done(null, rows);
 });
}

编辑::我不确定将问题标记为已解决的正确方法,但是通过修复列表覆盖并使响应成为对象我能够使我的代码工作。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您正在覆盖list变量。试试

list.getListMovie(req.params.id, function(err, movieList) {
  if (err) {
    res.json(errorHandler.handleDatabaseErrors(err));
    return;
  }
  var response = {};
  response["movies"] = movieList;
  console.log(response)
  list.getListTV(req.params.id, function(err, tvList) {
    if (err) {
      res.json(errorHandler.handleDatabaseErrors(err));
      return;
    }
    response["tv"] = JSON.parse(tvList);
    console.log(response)
    res.json(utils.returnFormatForDB(response));
  });
});

另外,我很确定你希望response变量是一个对象,而不是一个数组。