无论如何,模块总是返回null

时间:2013-12-15 06:04:26

标签: node.js node-mysql

我是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”。我已经验证查询是行中的返回项。

请建议。

1 个答案:

答案 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的回调发送,这是数据实际可用的地方。