节点MySQL插入,通过填充3个表格检索具有完整注册stream程的callback的多个表格

我知道这个问题很大。 但下面的代码是通过更新3表成功地工作,但我在处理,多个callback击中。 而且在这种情况下还需要帮助以获得最佳实践方式来处理callback。

工作目标:需要维护registry,login表,user_info具有公共用户名,电子邮件信息的表

  • 成功的registry单从客户端提交到Req到Node JS之后
  • 第一个条件名称不应该已经存在 – >检入代码
  • 第二个条件电子邮件不应该已经存在 – >签入代码
  • registrylogin表 ,用户信息必须填写。 – >工作

但主要的意义是需要更新并同时检查任何mysql || 在“INSERT INTO”操作中的任何错误。

这是启动过程的路线//无代码中的语法错误 – 需要function点和帮助的逻辑点

router.post('/api/register', function(req, res, next) { console.log(req); let registerData = req.body; let gotCallBack = false; dbConnection(function(err, connection) { if(err) { console.log(err); res.send({'error': 'Something went wrong with Connection'}) } else { registerSave(registerData, connection, function(error, response) { if(!error && response == 'success') { res.send({'success': registerData.username}); } else if(!error && (response == registerData.username || response == registerData.email)) { res.send({'exists': response}); } else { if(gotCallBack) { return ; } else { gotCallBack = true; res.send({'error':'Something went wrong'}); } } }); } }); }); 

这里所有3个带有callback代码的表格插入操作

 let checkDBData = require('./check_data'); let checkUserInfoData = {}; let processError = false; function registrationSave(regData, connection, callback) { checkUserInfoData.colName = 'username'; checkUserInfoData.colValue = regData.username; checkDBData.checkUserInfoFieldsExists(checkUserInfoData, connection, function(err, result) { if(err) { console.log(err); callback(err, null); connection.release(); } else if(!err && result == regData.username){ callback(null, result); connection.release(); } else { checkUserInfoData.colName = 'email'; checkUserInfoData.colValue = regData.email; checkDBData.checkUserInfoFieldsExists(checkUserInfoData, connection, function(err, result) { if(err) { console.log(err); //do something to setback flow callback(err, null); connection.release(); } else if(!err && result == regData.email){ // callback(null, result); connection.release(); } else { insertRegistration(regData, connection, function(err, result) { callback(err, result); connection.release(); }); } }); } }); let insertRegistration = function(regData, connection, done) { let regStoreData = { // here Registration Form Post data is Equalizing with Table columns }; connection.query('INSERT INTO registration SET ?', regStoreData, function(err, result) { if (err) { console.log(err); done(err, null); } else { let loginTableFilled = false; let userinfoTableFilled = false; console.log(result); insertUserInfo(regData, connection, function(err, response){ if(err) done(err, null); else { userinfoTableFilled = true; } }); inserLogin(regData, connection, function(err, response){ if(err) done(err, null); else { loginTableFilled = true; } }); if(loginTableFilled && userinfoTableFilled) { done(null,'success') } // } }); } let insertUserInfo = function(regData, connection, cb) { let userInfoTableData = { // here also user_info table column is defining with Post Registration details } connection.query('INSERT INTO user_info SET ?', userInfoTableData, function(err, result) { if (!err && result) { console.log(result.affectedRows); cb(null, result.affectedRows); } else { console.log(err); cb(err, null); } }); } let inserLogin = function(regData, connection, cb) { let loginTableData = { // here login table is updating from Registration detials } connection.query('INSERT INTO login SET ?', loginTableData, function(err, result) { if (!err && result) { console.log(result.affectedRows); cb(null, result.affectedRows); } else { console.log(err); cb(err, null); } }); } } 

而对谷歌来说,自上而下的工作就是certificate学生已经达到了这个程度。 我已经看到蓝鸟承诺是最好的解决scheme,如果我们已经想到承诺,但我的编码水平在callback本身。

任何范围的帮助都是值得赞赏的