next.js Api route给予警告,例如已解析/ API,但未发送对/api/***的响应,这可能导致请求停止

wztqucjr  于 2022-11-23  发布在  其他
关注(0)|答案(2)|浏览(174)

我正在使用next.js API Route with axios,我的API在下面给出警告
API已解析,但未发送/api/authentication/login的响应,这可能导致请求停止。
我找不到我做错了什么

import axios from 'axios'
import type { NextApiRequest, NextApiResponse } from 'next'

const handler = (req: NextApiRequest, res: NextApiResponse): void => {
  axios({
    method: 'post',
    headers : { 'Content-type': 'application/json' },
    url: `${process.env.WEB_API_URL}/authentication/login`,
    data: req.body,
  })
    .then((results) => {
      res.status(results.status).json(results.data)
    })
    .catch((error) => {
      res.status(error.status).json(error.response.data)
    })
}

export default handler
ryevplcw

ryevplcw1#

你有一个承诺(您的axios请求),并且您应该返回它。(而不等待promise解析),并且api调用结束而没有响应。您可以通过以下两种方法之一解决此问题-返回promise,或者await返回axios调用的结果:
第一个
注意,我在函数的返回签名中添加了Promise,但是Promise<void>是不正确的。我对你的数据结构一无所知,所以你可能想把void修改成实际上的样子。

mqkwyuun

mqkwyuun2#

我把GitHub的答案加起来
这可能是因为cors中间件没有等待next()。

// BAD: This will lead to UnhandledPromiseRejection
router
  .use(async (req, res, next) => {
    next();
  })
  .use(async (req, res, next) => {
    next();
  })
  .use(async () => {
    throw new Error("💥");
   });

// GOOD
router
  .use(async (req, res, next) => {
    await next(); // next() is awaited, so errors are caught properly
  })
  .use((req, res, next) => {
    return next(); // this works as well since we forward the rejected promise
  })
  .use(async () => {
    throw new Error("💥");
   // return new Promise.reject("💥");
  });

相关问题