nodejs,如何调用/传递来自其他函数

时间:2016-05-14 22:08:18

标签: javascript node.js asynchronous

我的http.createServer响应有问题。

我有一个onRequest函数,它解析来自用户POST的正文并将其传递给我的函数。我希望在我的函数完成查询后向客户端发送响应,但是我无法将响应传递给我的函数,因为它在匿名函数中是未定义的。

function onRequest(request, response){
    console.log("Request received.");
    if (request.method == 'POST'){
        var body =' ';
        request.on('data', function(data){
            body += data;
        });

        request.on('end', function(){
           var as = JSON.parse(body); 
           spatial_index_query(as['x'], as['y'], response);
        });
    }
}
http.createServer(onRequest).listen(8013, '0.0.0.0');

我的功能

function spatial_index_query(x, y, res) { 
    db.get("Select id from spatial_index where minX < ? AND minY < ? AND maxX > ? AND maxY > ?",[x, y, x, y], 
        function(err, rows, res){
           response.writeHead(200, {"Content-Type":"text/plain"});
           response.write('it works');
           response.end();
        };

它不起作用。

现在如果我试图将响应传递给像这样的正常函数

function test(response){
    console.log(response);
};

它可以工作,但如果我试图将响应传递给内部具有匿名函数的函数,那么事实证明响应是未定义的。

在这种情况下使用响应的正确方法是什么?

我可以将我的功能改为这样的

function spatial_index_query(x, y) { 
    db.get("Select id from spatial_index where minX < ? AND minY < ? AND maxX > ? AND maxY > ?",[x, y, x, y], 
        function(err, rows){
             return 'it works'
             // how to call response now?
        };

但我现在不知道如何调用响应。

我还试图在onRequest函数中创建result()函数,我可以在查询和传递结果后从我的函数调用,但是它不起作用,因为在onRequest函数之外看不到result()。

修改
我的功能中有拼写错误,而不是响应。固定功能:

function spatial_index_query(x, y, response) { 
    db.get("Select id from spatial_index where minX < ? AND minY < ? AND maxX > ? AND maxY > ?",[x, y, x, y], 
        function(err, rows){
           response.writeHead(200, {"Content-Type":"text/plain"});
           response.write('it works');
           response.end();
        };

1 个答案:

答案 0 :(得分:0)

我的功能中输入错误,而不是响应。固定功能:

function spatial_index_query(x, y, response) { 
db.get("Select id from spatial_index where minX < ? AND minY < ? AND maxX > ? AND maxY > ?",[x, y, x, y], 
    function(err, rows){
       response.writeHead(200, {"Content-Type":"text/plain"});
       response.write('it works');
       response.end();
    };