在NodeJS中进行MySQL查询的最佳实践

我很新的nodeJS,什么是最好的方式来实现SQL查询..

当我在NodeJS中执行mysql插入操作时,我需要查询是否存在值,然后我需要执行额外的查询来获取1个字段的最大值。

一切都有callback,并依靠一个查询来执行,然后再转到下一个。 这变得非常混乱,尤其是因为我必须通过函数中的所有callback函数。

我正在考虑创build存储过程,以保持逻辑清洁..

this.get = function(data, callback, getMaxOrder, parentScope){ var val = db.query('select * from my_table where ?', data, function(err, result) { if (err) throw err; callback(data, result, getMaxOrder, parentScope); }); } this.getMaxOrder = function(data, callback, parentScope){ var val = db.query('select max(`order`) as maxOrder from my_table where some_attr = ?', [data.some_attr], function(err, result) { if (err) throw err; callback(data, result, parentScope); }); } this.parentInsert = function(data, callback){ console.log("call parent insert.."); db.config.queryFormat = db.config.defaultQueryFormat; db.query('insert into cards SET ?', data, function(err, result) { if (err) throw err; //callback(result); }); } this.insert = function(data, callback){ //get all names w/ the same board id.. var getResults = function(data, results, getMaxOrder, parentScope){ if(results.length == 0){ console.log("incremenet the order.."); //by getting... max order.. var maxOrderCallback = function (data, results, parentScope){ var order = results[0].maxOrder + 1; //now update... var newData = {order: order, name: data.name, boardId: data.boardId, userId: data.userId}; parentScope(newData); } getMaxOrder(data, maxOrderCallback, parentScope); }else{ //throw "Name for card in the board already taken!"; } } this.get(data, getResults, this.getMaxOrder, this.parentInsert); } 

callback地狱的经典案例。 看看你的MySQL驱动程序是否支持Promise 。 如果没有,有一些查询生成器可以这样做: