1

我是新来的nodejs。这是我在nodejs文件中的代码。我想将数据发送nodejs给其他javascript用途json.stringify,但我的问题是我得到值...... ----------------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
        }
    });

}

如何解决这个问题?

4

2 回答 2

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);
    }); 

}
于 2013-05-04T03:50:07.473 回答
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);
  });
}
于 2013-05-04T13:33:29.950 回答