我的Node Express应用程序中出现以下错误

未处理的Promisejection警告:未处理的promise 拒绝.这

至少可以说,我创建了一个助手函数,看起来像这样

const getEmails = (userID, targettedEndpoint, headerAccessToken) => {
    return axios.get(base_url + userID + targettedEndpoint,  { headers: {"Authorization" : `Bearer ${headerAccessToken}`} })
    .catch(error => { throw error})
}

然后我导入这个助手函数

const gmaiLHelper = require("./../helper/gmail_helper")

在我的api路径中调用它

router.get("/emailfetch", authCheck, async (req, res) => {
  //listing messages in users mailbox 
  let emailFetch = await gmaiLHelper.getEmails(req.user._doc.profile_id , '/messages', req.user.accessToken)
  .catch(error => { throw error})
  emailFetch = emailFetch.data
  res.send(emailFetch)
})

从我的Angular 来看,我认为我是通过使用catch块来处理错误的.

有人能解释一下我为什么会出错,以及我该如何修复它吗?

推荐答案

.catch(error => { throw error})是不可操作的.它会导致路由处理程序中未经处理的拒绝.

正如this answer中所述,Express不支持promise ,所有拒绝都应手动处理:

router.get("/emailfetch", authCheck, async (req, res, next) => {
  try {
  //listing messages in users mailbox 
    let emailFetch = await gmaiLHelper.getEmails(req.user._doc.profile_id , '/messages', req.user.accessToken)
    emailFetch = emailFetch.data
    res.send(emailFetch)
  } catch (err) {
    next(err);
  }
})

Node.js相关问答推荐

node 无法验证第一个证书

使用Vite和ReactJS时,在哪里设置NODE_OPTIONS?

如何在Node js中从MongoDB获取特定数据,使用GET方法?

如何处理EPIPE时,使用axios并期待413响应?

如何更改ejs中的镜像src,以防从OMDB API获取的某些镜像具有src=N/A

为什么我收到此错误:MissingSchemaError:架构尚未为模型&业务&注册

类扩展值[object object]不是构造函数或null

mongoose 7.0.3 使用运算符 $and 严格搜索日期

Typescript 条件语句不过滤值?

找不到react 模块:错误:默认条件应该是最后一个

Angular Build 生产返回致命的 javascript 无效大小错误

Next.js 在我的电脑上没有构建错误,但它们在使用 Vercel 部署时发生

使用 NPM 三个 mocha+typescript 进行测试

用户与mongoose 的完美搭配

您如何写入 aws lambda 实例的文件系统?

如何undo撤消 Object.defineProperty 调用?

我应该在(Docker)容器中使用 forever/pm2 吗?

Node.js 服务器中没有缓存

为什么我们要为 Angular 2.0 安装 Node.js?

如何在离线时安装 npm 包?