如何在 Node.js 中使用 express 顺序发送 mysql 查询

阿玛尼88

我编写了以下代码,其中我有一个执行 2 个查询和一些其他操作的发布请求:

router.post('/', (req, res) => {
    dbController.query(
        "SELECT * FROM users WHERE username = 'myUserName'",
        (err, result) => {
            console.log('<---- 1 ---->')
        }
    )
    // do something
    console.log('<---- 2 ---->')
    // do something
    dbController.query(
        "SELECT * FROM users WHERE username = 'myUserName'",
        (err, result) => {
            console.log('<---- 3 ---->')
    })
    res.send('ok')
})

我想按顺序执行函数内的所有指令,所以不要得到这个输出(这是我在执行代码后得到的那个):

<---- 2 ---->
<---- 1 ---->
<---- 3 ---->

我想要这个:

<---- 1 ---->
<---- 2 ---->
<---- 3 ---->

请注意,将关键字添加async到函数和await查询后,没有任何变化

海科·泰森

由于您将dbController.query回调函数(err, result) => {...}作为第三个参数提供,因此它不会返回承诺,而是异步调用回调。如果你 wrap dbController.queryin util.promisify,你会得到一个返回 promise 的函数

  • 要么解决result,你可以await
  • 或拒绝为err,你可以catch

这两种风格在功能上是等效的,但是使用util.promisify, 您可以使用asyncawait

router.post('/', async (req, res) => {
  var queryPromise = util.promisify(dbController.query.bind(dbController));
  try {
    var result = await queryPromise("SELECT * FROM users WHERE username = 'myUserName'")
    console.log('<---- 1 ---->')
    console.log('<---- 2 ---->')
    result = await queryPromise("SELECT * FROM users WHERE username = 'myUserName'")
    console.log('<---- 3 ---->')
    res.send('ok')
  } catch(err) {
    res.status(400).send(err);
  }
})

(许多其他数据库客户端库提供开箱即用的 Promise 风格。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 Node.js 中使用 express-winston 将日志存储到 mysql db

如何在Node.js和Express中使用PATCH

如何使用curl查询Node.js Express

如何使用Node.js和Express在MySQL中使用多个变量进行选择*?

使用Express Node进行多个mysql查询

如何在express.js中解决承诺的mysql查询?

如何在异步 Node.JS 中使用 MySQL

登录后,Node.js MySql如何知道要在查询中使用的用户标识

如何使用http get方法(Angular js)按顺序(顺序)发送查询参数

如何在 mysql 查询的 module.export 函数中使用回调 - nodejs,express

创建Express服务时如何在Node.js中使用`index.js`?

如何使用node.js在MySQL上进行大量查询

如何在Express JS中使用特定字段而不是ID进行查询

如何在 Node.js 中使用“x-forwarded-for”(如果可能,不使用 Express)

如何调用返回 mysql 查询结果的函数以将其发送回 Express.js 结果?

如何在Node JS中使用Express读取带有句点的参数?

如何在node.js express中使用sequelize与控制器?

如何在express / node.js中使用POST从URL编码形式检索数据/键:值对?

如何在 Node JS 中使用 express 创建控制器和路由器

如何在条件中间件中使用Node.js Express会话?

如何在 MySQL 查询中使用 INCLUDE?

如何在mysql中使用嵌套查询

使用MySQL的Node.js同步查询

如何在node.js的路由中使用LIKE(regex)查询mongodb?

如何在node.js中将Express与Promise结合使用?

如何在Express.js中使用mysql将n个输入存储到数组中

如何在express.js中使用服务器发送事件

如何在Cucumber-JS步骤定义中使用Node-mysql连接到MySQL?

如何正确执行SQL查询(node.js + express)