我是node.js的新手,并想知道为什么我的代码总是返回null。
我有db.js
exports.getItems = function(){
var conn = mysql.createConnection();
conn.connect();
conn.query("Select * From Items", function(err, rows, fields) {
if (err) throw err;
conn.end();
return rows;
});
};
,模块就像这样调用:
var db = require('../db.js');
exports.items = function(req, res){
var data = db.getItems();
console.log('second', data);
res.end(data);
};
和路线:
app.get('/api/items', api.items);
console.log('second')始终是“second undefined”。我已经验证查询是行中的返回项。
请建议。
答案 0 :(得分:0)
经典异步问题。
getItems
将在数据库查询完成之前返回。来自数据库的数据在回调中返回,而不是在函数本身中返回。
当你写:
var data = db.getItems();
console.log('second', data);
res.end(data);
data
的值为undefined
,因为return
内没有getItems
语句!所以getItems
根据JavaScript的规则返回undefined。
你需要的是(并且请理解我没有测试过这个):
exports.items = function(req, res){
var conn = mysql.createConnection();
conn.connect();
conn.query("Select * From Items", function(err, rows, fields) {
conn.end();
if (err) throw err;
res.end(rows);
});
}
在线查看各种网站,以便干净地管理连接。但这应该足以让您了解响应应该从query
的回调发送,这是数据实际可用的地方。