我想要实现的是在闭包内进行数据库查询。返回数据,然后将内容发送给用户。我知道最佳实践是使用数据库池。问题是查询不同步。
简化代码:
服务器.js
var express = require('express'),
app = express(),
server = require('http').createServer(app),
mysql = require('mysql');
app.set('DB:pool', mysql.createPool(process.env.DATABASE_URL));
var myClosure = require('./closure.js')(app));
app.get('/somepage', function(req, res) {
var data = myClosure.myquery();
res.send(data);
});
app.get('/anotherpage', function(req, res) {
var data = myClosure.myquery();
res.send(data);
});
app.listen(3000);
闭包.js
function myClosure(app) {
var pool = app.get('DB:pool');
return {
myquery: function(inp) {
pool.getConnection(function(err, db) {
if (err) throw err;
db.query('SELECT * FROM table', function(err, rows, fields) {
if (err) throw err;
data = rows[0]
db.release();
});
});
return data;
}
};
}
module.exports = myClosure;
在示例中,我发现所有与数据库相关的东西都是在路由回调中制作的,并且响应是在查询回调中发送的。但是我试图这样做的方式不起作用,因为 myquery 返回 undefined 因为 sql 查询没有在那里完成。
那么处理查询的正确方法是什么?