express mysql 异步,Express JS对请求使用异步功能

app.use(async function(req, res, next) {

try {

var myres = await new Promise((resolve, reject) => {

mysql_connection.query("select * from Users;", (err, rows) => {

if (err) {

reject(err);

} else {

resolve(rows);

}

});

});

} catch (error) {

console.log(error);

}

});

Question is. using async function to be able to use await for DB queries is ok? i am afraid that it can cause some problems on expressjs side.

解决方案

Async await can be used with no problem for DB queries. You could use try catch however there is a more elegant solution which allows you to use the error handling middleware which express offers:

You wrap your middleware with this function:

const asyncMiddleware = fn =>

(req, res, next) => {

Promise.resolve(fn(req, res, next))

.catch(next);

};

Then you can use it in the following manner:

const asyncMiddleware = require('./utils/asyncMiddleware');

router.get('/', asyncMiddleware(async (req, res, next) => {

/*

if there is an error thrown in getUserFromDb, asyncMiddleware

will pass it to next() and express will handle the error;

*/

const user = await getUserFromDb({ id: req.params.id })

res.json(user);

}));

If an error is thrown the control will be handed over to the error handling middleware which is middlware which has four arguments like this:

app.use(function (err, req, res, next) {

// your error code

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值