如何使用Promise从Node.js中的mysql查询获取结果

时间:2018-10-06 11:26:51

标签: mysql node.js promise es6-promise bluebird

我一直在使用普通的回调函数来获取mysql查询来为我的应用程序创建一个REST API,但是代码变得太复杂了,因为这是获取用户个人资料的代码

const con=require('../mysql.js');
     router.route("/profile")
            .post(checkjwt,(req,res,next)=>{
              try{
              var decoded = jwt.verify(req.body.token, config.secret);
              var mobile=decoded.mobile;



              if(mobile==null){
                res.json({
                  status:404,
                  message:'Please provide mobile Number'
             });
              }
              else{
                    var sql="select * from flavica_user where USER_MOBILE=?";
                con.query(sql,mobile,(err,result)=>{
                 if(err){
                  res.json({
                    status:204,
                    message:err.sqlMessage
               });
                 }
                 else if(result.length==0){
                  res.json({
                    status:404,
                    message:'No Data Found'
               });
                 }
            else if(result.length>0){
              res.json({
                status:200,
                message:result[0]
            });
            }

                });


              }
              }
              catch(err) {
                res.json({
                  status:404,
                  message:'Wrong Authorization token'
              });
              }



            })

我搜索了有关bluebird promise库的信息,但是文档对此并不十分清楚。任何有关它的帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

您可能想像这样使用它

var Promise = require("bluebird"); //use blue bird library after installing npm install bluebird

const con=Promise.promisifyAll(require('../mysql.js'));

router.route("/profile").post(checkjwt,(req,res,next)=>{
  try{
    var decoded = jwt.verify(req.body.token, config.secret);
    var mobile=decoded.mobile;
    var sql="select * from flavica_user where USER_MOBILE=?";
    con.queryAsync(sql,mobile).then(function(result){//bluebird identifies with Async
      res.json({
        status:200,
        message:result
      })
    }).catch(function(err){
      console.log(err);
    })

  }
  catch(err) {
  console.log(err);
  }
});

您可以在两者之间添加错误处理序列。希望对您有所帮助