【问题标题】:Express: Issue with async request handlerExpress:异步请求处理程序的问题
【发布时间】:2021-02-18 04:06:54
【问题描述】:

我在 express 上运行以下代码:

app.get('/items/:item', async function (req, res) {
  let itemName = req.params.itemName;
  let item = new DataItem(itemName);
  let itemProcessed = await item.process(); //call of async method 
  console.log(itemProcessed); //prints data processed 
  res.json(itemProcessed);
})

我看到没有发送响应。
我还可以看到 itemProcessed 字符串表示是用 console.log 打印的 如果我从函数中删除异步人员(异步前缀和一些异步方法的调用) - 响应已发送

有什么遗漏吗?提前致谢

【问题讨论】:

  • 这听起来很奇怪。可以分享一下DataItemprocess函数的实现吗?
  • class DataItem { async process() { let dataRead = await this.getSomeDataFromWeb(); //with fetch this.fillByDataRead(dataRead); return this; } }

标签: node.js express async-await


【解决方案1】:

我想你应该使用 express-async-wrap 包才能使用 async 处理程序:

const wrap = require('express-async-wrap')


app.get('/items/:item', wrap(async function (req, res) {
  let itemName = req.params.itemName;
  let item = new DataItem(itemName);
  let itemProcessed = await item.process(); //call of async method 
  console.log(itemProcessed); //prints data processed 
  res.json(itemProcessed);
})

【讨论】:

    猜你喜欢
    • 2021-08-01
    • 2016-06-16
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 2016-10-05
    • 2015-07-03
    相关资源
    最近更新 更多