귀하의 코드가 비동기 작동하지 않습니다,하지만 당신은 기적을 호출하고 있습니다.
이렇게하고 싶으면 SqlQuery
에 콜백을 전달해야합니다.
var SqlQuery = require(./path/to/sqlQueryFile);
var rows = SqlQuery('pass sql here', function(recordSet){
console.log(recordSet);
res.json(recordSet);
});
편집 :
/* pool -create connection pool mysql*/
var sqlQuery = function (sqlString, callback) {
var _result = pool.getConnection(function (err, connection) {
/* error handling*/
connection.query(sqlString, function (err, rows) {
console.log(this.sql);
if (!err) {
callback(rows);
}
connection.release();
});
});
};
module.exports = sqlQuery;
그리고 그것을 호출 자바 스크립트의 최신 버전을 사용하는 경우, 당신은 더 많은 몇 가지 옵션이 있습니다.
function sqlQuery (sqlString) {
return new Promise((resolve, reject) => {
pool.getConnection(function (err, connection) {
if (err) { return reject(err); } // error handling
connection.query(sqlString, function (err, rows) {
if (err) { return reject(err); }
resolve(rows);
connection.release();
});
});
});
}
module.exports = sqlQuery;
을 그리고 당신이 좋아 사용하십시오 :
당신이 약속에 액세스 할 수있는 경우, 당신은이 작업을 수행 할 수 있습니다 당신도 새로운 자바 스크립트 를 사용하는 경우
var SqlQuery = require(./path/to/sqlQueryFile);
SqlQuery('pass sql here')
.then(function(recordSet) {
console.log(recordSet);
res.json(recordSet);
})
.catch(function(err) {
// do your error handling
res.status(500).json({ err: 'Sorry there was an error' });
});
, async/await 구문을 사용할 수 있습니다 (현재 Babel을 통해 사용 가능하며 FireFox에서 생각합니다 .V55의 Chrome).
체인 var SqlQuery = require(./path/to/sqlQueryFile);
async handleQuery(query) {
try {
var rows = await SqlQuery(query);
res.json(rows);
} catch (e) {
console.log('Error!', e);
}
}
여러 쿼리 함께 : 나는 중첩 콜백이 여러 쿼리를 실행하는 경우처럼 밖으로 데이터를 얻을하려는 경우
async handleQuery(query) {
try {
return await SqlQuery(query);
} catch (e) {
console.log('Error!', e);
}
}
var rows = await handleQuery('select * from tablename');
var rowsToReturn = await handleQuery('select id from another_table where name = "' + rows[0].name + '"');
감사 데이비드, 그래서, 난 그냥에있다 데이터를 콜백으로 랩핑한다. 정말보기 흉한 코드가 될 것입니다. 깨끗한 방법이 있습니까? –
@MoHassan이 내 편집을 참조하십시오. – David
더 많은 옵션을 사용하여 양식을 선택해 주셔서 감사합니다. –