目標:製作多個MySQL調用
我試圖讓使用這樣一個查詢的結果作爲「mysql的」模塊中的Node.js多個SQL查詢輸入下一個語句。
sql1 = SELECT id FROM users WHERE email=? // get user id from email
val1 = [email protected]
sql2 = SELECT something FROM profiles WHERE user_id=?
val2 = user_id // result of sql1
做法:
我使用的是JS 「承諾」 來實現這一目標:
var run_query = function(conn,sql){
return new Promise(function (fulfill, reject){
conn.query(sql, val, function(err, res) {
if(err) reject(err);
else fulfill(res);
});
});
}
var conn = db.config(mysql);
run_query(conn,[ 'SELECT id FROM users WHERE email=?' , ['[email protected]'] ]).then(function(result){
console.log(result.id); // result of 1st query
return run_query(conn,[ 'SELECT something FROM profiles WHERE user_id=?' , [result.id] ]);
}).then(function(result){
console.log(result.something); // result of 2nd query
}).catch(function(err){
console.log('there was an error', err);
});
conn.end();
問題:
首屆查詢返回正確的結果,但第二個查詢從mysql模塊中引發以下錯誤:
Error: Cannot enqueue Query after invoking quit.
~blah blah blah~
code: 'PROTOCOL_ENQUEUE_AFTER_QUIT', fatal: false
我試圖解析:
我相信這事做多次調用被製成,而連接是打開和conn.end();被稱爲最後。我把它移動了一下,但沒有奏效。
我試圖打開多個語句mysql的模塊
var conn = mysql.createConnection({multipleStatements: true});
..但沒有工作要麼。
如何用JS承諾結構使用mysql節點模塊?
您可能想要使用類似[Sequelize](http://docs.sequelizejs.com/en/v3/)的支持開箱即用的承諾,而不是將自己的包裝破解在一起。 – tadman