在node.js中返回null值?

时间:2013-05-04 03:44:19

标签: javascript node.js

我是nodejs的新人。这是我在nodejs文件中的代码。 我想将数据从nodejs发送到其他javascript使用json.stringify,但我的问题是我得到 null 值... ---------------- EDIT -----------------------

我的代码是

function handler ( req, res ) {
        calldb(dr,ke,function(data){
            console.log(data); //successfully return value from calldb                                      
        });
    //i think my problem bellow...
    res.write( JSON.stringify(data)); //send data to other but it's null value
    res.end('\n');
}

function calldb(Dr,Ke,callback){
    // Doing the database query
    query = connection.query("select id,user from tabel"),
        datachat = []; // this array will contain the result of our db query
    query
    .on('error', function(err) {
        console.log( err );
    })
    .on('result', function( user ) {
        datachat.push( user );
    })
    .on('end',function(){
        if(connectionsArray.length) {
            jsonStringx = JSON.stringify( datachat );
            callback(jsonStringx); //send result query to handler
        }
    });

}

如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

您将需要使用回调,直接返回数据只会返回null,因为稍后在所有数据准备就绪时调用end事件处理程序。尝试类似:

function handler ( req, res ) {
    calldb(dr, ke, function(data){
       console.log(data);
       res.write( JSON.stringify(data)); 
       res.end('\n');
    });
}

function calldb(Dr,Ke, callback) { 

    var query = connection.query('SELECT id,userfrom tabel'),
        datachat= []; // this array will contain the result of our db query

    query
     .on('error', function(err) {
        console.log( err );
     })
     .on('result', function( user ) {
        datachat.push( user );
     })
     .on('end',function() {
        callback(datachat);
    }); 

}

答案 1 :(得分:1)

问题是nodejs是异步的。它将执行你的res.write(JSON.stringify(data));在你的函数被调用之前。您有两种选择:一种是避免回调:

    .on('end',function(){
      if(connectionsArray.length) {
        jsonStringx = JSON.stringify( datachat );
        res.write( JSON.stringify(data)); 
        res.end('\n');
      }
    }

另一个在回调函数中有响应,如下所示:

function boxold() {
  box(function(data) {
        res.write( JSON.stringify(data)); 
        res.end('\n');
        //console.log(data);
  });
}