这是我的app.js文件
var http = require('http');
var url = require('url');
var mysql = require('mysql');
var requestListener = function(request, response){
var urlParse = url.parse(request.url,true);
var path = urlParse.pathname;
var query = urlParse.query;
var jsonString;
if(path === "/getArticleById"){
var conn = mysql.createConnection({
host:'localhost',
port:'3306',
user:'root',
password:'root123',
database:'food'
});
conn.connect(function(err){
if(err){
console.log('Error connecting to database');
return;
}
response.writeHead(200, {'Content-Type': 'text/plain' });
});
var id = query.id;
conn.query('select * from article where id=?', id,function(err,rows){
if(err){
console.log(err);
}
jsonString = rows;
});
conn.end();
console.log(jsonString);
}
};
var server = http.createServer(requestListener);
server.listen(8080);
在conn.query里面的jsonString中,我得到了打印行的值。 最后一个console.log没有打印任何东西,它也是jsonString。
抱歉,我是node.js的新手,不知道如何使用对象。
答案 0 :(得分:1)
Javascript本质上是异步的。
conn.query('select * from article where id=?', id,function(err,rows){
if(err){
console.log(err);
}
jsonString = rows;
});
尝试在回调中打印jsonString。所以,你的代码看起来应该是
conn.query('select * from article where id=?', id,function(err,rows){
if(err){
console.log(err);
}
jsonString = rows;
console.log(jsonString);
});
您的代码如何执行
query()
之后(但在获得结果/回调之前),您的下一行代码即conn.end()
将被执行。然后你试图打印jsonString,注意,直到现在你还没有从DB返回结果(因为它是异步操作)。这就是为什么jsonString还没有保留任何价值的原因。因此你没有打印出结果。<强>解决方案:强>
检索结果后打印jsonString。这意味着,在回调中。