あなたのコードが非同期で動作していないが、あなたは同期的にそれを呼んでいます。
このようにしたい場合は、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;
し、次いでそれを呼び出すあなたのJavaScriptの新しいバージョンを使用している場合は、さらにいくつかのオプションがあります。
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;
をそしてあなたはそれが好きで使用したい::
あなたが約束へのアクセス権を持っている場合は、あなたがこれを行うことができ、あなたも新しいはJavaScript を使用している場合
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
を参照してくださいフォームを選択するより多くのオプションを持っています –