我是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
}
});
}
如何解决这个问题?
答案 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);
});
}