Express JS 在请求上使用异步函数

2024-03-07

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);
    }
});

问题是。使用异步函数能够使用await进行数据库查询可以吗?我担心它会在expressjs方面引起一些问题。


async..await是 Promise 的语法糖,Promise 只是一种依赖回调的模式。指某东西的用途async只要环境支持,函数就是可以接受的。async..await从 Node.js 7.6.0 开始受支持。

async函数总是返回一个承诺。只要这个隐式返回值不会引起问题,在任何地方都没有问题,包括 Express。无论它是用于数据库查询还是其他任何东西都没关系。

除非 API 支持 Promise,否则错误应该完全在async功能。函数体应该用try..catch排除未处理的拒绝,这可能会导致未来 Node 版本中出现异常。

原代码不包含next调用并只是抑制错误。根据经验,async中间件的结构应该是这样的:

app.use(async function(req, res, next) {
    try {
        ...
        next();
    } catch (error) {
        next(error);
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Express JS 在请求上使用异步函数 的相关文章

随机推荐