从NodeJS中的异步函数返回值

时间:2013-07-17 17:17:44

标签: javascript node.js

我正在尝试从运行在Node.JS上的服务器端代码中获取JSON中的查询数据

这是我的客户端AJAX请求:

$(function() {
  var values = $(this).serialize();
  $.ajax({
    url: '/querySearch',
    type: 'post',
    data: values,
    success: function(msg){
      console.log(msg);
    },
    error: function(){
      alert('failure');
    }
  });
});

我的serserside代码:

app.post('/querySearch', function(req, res) {
  var queryNumber = Number(req.body.queryNumber);
  if (queryNumber == 1){
    executeQuery1(res, sendQueryResults);
  }
  else if (queryNumber == 4){
    executeQuery4(res, sendQueryResults);
  }
  else if (queryNumber == 6){
    executeQuery6(res, sendQueryResults);
  }
  else if (queryNumber == 7){
    executeQuery7(res, sendQueryResults);
  }
});

function executeQuery1(res, callback) {
    var query = "" +
    'query string';
    service.oneshotSearch(query, {}, function(err, results) {
      if (err) {
        console.log(err);
        alert("An error occurred with the search");
        return;
      }
    callback(res, results);
    });
  });

} 

function sendQueryResults(res, results) {
  res.json(JSON.stringify(results));
  res.end();
}

但是,目前,我的网页甚至无法完成加载。我做错了什么?

2 个答案:

答案 0 :(得分:1)

在您将数据写入后,您需要致电res.end()

答案 1 :(得分:0)

嗯,我看到的一个问题可能是问题是res.json接受了一个对象并且你传递了一个字符串。尝试:

res.json(results);

或只是res.send

res.send(JSON.stringify(results));

或者我认为这也可以。

res.send(results);

这三个都应该有相同的结果。