1
내가 달성하려고하는 닫는 내부 DB 쿼리를 만드는 것입니다. 데이터를 반환 한 다음 물건을 사용자에게 보냅니다. 데이터베이스 풀링을 사용하는 것이 가장 좋습니다. 문제는 쿼리가 동기화되지 않는다는 것입니다.Node.js, Express 및 MySQL. 어떻게 올바른 방법입니다.
간체 코드 : 예에서
server.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);
closure.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;
내가 모든 DB 관련 물건 경로 콜백 및 응답에서 만들어진 발견 쿼리 콜백에서 보냈습니다. 하지만 SQL 쿼리가 거기서 완료되지 않았기 때문에 myquery가 undefined를 리턴하므로 작동하지 않으려 고합니다.
그래서 쿼리를 처리하는 올바른 방법은 무엇입니까?
내가 그 감각을 만드는 것 같아요 (즉, 사용하는 것 같지 않았기 때문에 나는
inp
인수를 왼쪽)! 빠른 대답을 주셔서 감사합니다 – Lauri오류가 발생하면 DB를 공개하는 것은 어떨까요? 그것은 당신의 모범이 아니라는 것이다. 가상화 계층이 있습니까? 매번 수동으로 처리해야합니까? –
@MaciejDragan 좋은 캐치! 내 대답을 편집 할게 :) – robertklep