我的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相关问答推荐

使用Moongose处理node.js中重定向的then()块链

GraphQL MongoDB Mongoose填充字段未获取多个类别

根据我的测试,为什么在编写Varint代码方面,NodeJS要比Rust快这么多?

如果我加入另一个公会且我的​​机器人已在其中,欢迎消息发送错误

为什么我的 Node.js 应用程序在登录时无法正确验证密码(使用 Passport-local 和 bcryptjs)?

nyc 代码覆盖不适用于 NodeJs Express 服务器

在 .htaccess 中从非 www 切换到 www 后如何解决无法访问该站点?

node Axios 创建全局令牌变量以在单独的变量头中使用

带有事件网格的 Azure 函数在没有 ngrok 的情况下在本地运行

使用Typescript 时我应该避免循环导入吗?

后端位于 Docker 容器中时的 SvelteKit SSR fetch()

当我们有esnext时,为什么我们需要nodenext typescript 编译器选项?

Node js中向rest服务发送https请求的步骤

我可以向NPM添加调试脚本吗?

调用 require 时的 const vs let

TypeError:winston.Logger 不是带有winston 和morgan 的构造函数

Puppeteer:如何提交表单?

如何判断 Node.js 中是否设置了环境变量?

使用 node.js 循环 JSON

AWS Lambda:如何将秘密存储到外部 API?