我正在发现Nodejs和node-mysql模块。我有一个小问题。我找到的每个教程都解释了如何对数据库进行选择,但它们永远不会返回行,它们总是记录它们,这对我的情况来说绝对没用。
我有一个app.js文件:
// Get continents
app.get("/continents", function(request, result) {
console.log("Continents : " + database.findAllContinents());
});
和mysql.js文件:
exports.findAllContinents = function(connection) {
var connection = getConnection();
connection.query('select id, code, name from Continent', function (err, rows, fields) {
if (err) {
console.log("Error in findAllContinents : " + err)
}
return JSON.stringify(rows);
});
closeConnection(connection);
};
如何让函数返回行以在app.js文件中使用它们?我真的不想在app.js文件中创建连接我想要分离DAO层。 你有什么想法吗?
另外,如果有人知道使用node-mysql而不是ORM(sequelize,persistence.js ......)的优点/缺点
由于
答案 0 :(得分:15)
query()
是一个异步函数,您无法从中返回任何结果。因此,任何调用异步函数的函数(如findAllContinents
)都不能。
相反,您需要传递一个回调函数(也解释为here),它将在查询完成时调用:
// app.js
app.get("/continents", function(request, response) {
database.findAllContinents(function(err, results) {
if (err)
throw err; // or return an error message, or something
else
res.send(results); // as a demo, we'll send back the results to the client;
// if you pass an object to 'res.send()', it will send
// a JSON-response.
});
});
// mysql.js
exports.findAllContinents = function(cb) {
var connection = getConnection();
connection.query('select id, code, name from Continent', function (err, rows, fields) {
// close connection first
closeConnection(connection);
// done: call callback with results
cb(err, rows);
});
};
至于(不)使用ORM,这实际上取决于用例。如果我的应用程序需要多个(复杂)模型,或者它们之间有关联,我会选择一个ORM(我最喜欢的MySQL是patio)。此外,ORM提供的抽象使代码更易于阅读,并且通常允许更轻松地将应用程序移植到不同的数据库。
答案 1 :(得分:-2)
此代码用于检查您在数据库中是否有任何单行
if(result.length == 1) {
var row = result[0];
console.log(row);
}