路由器 API 不能在 catch/ 中使用 res.end() 或 res.json()

Router API cannot use res.end() or res.json() in catch/

我不知道为什么,但是如果函数没有报错,它工作得很好,但是当它报错时,catch 总是显示

res.end is not a function

好像我不能在 catch 中使用 res,但在 try res 中仍然有效,我是不是漏掉了什么?

import axios from "axios";
import { NextApiResponse } from "next";

const handler = async (res: NextApiResponse): Promise<void> => {
  return new Promise((resolve, _) => {
  axios({
      method: "get",
      headers: { "Content-type": "application/json" },
      url:
        process.env.NODE_ENV === "production"
          ? "https://.../refresh_token"
          : "http://localhost:4000/refresh_token",
      withCredentials: true,
    })
      .then((response) => {
        res.statusCode = 200;
        res.setHeader("Content-Type", "application/json");
        res.setHeader("Cache-Control", "max-age=180000");
        res.end(JSON.stringify(response.data));
        resolve();
      })
      .catch((error) => {
        res.statusCode = 500;
        res.end(JSON.stringify((error as Error).message));
        resolve(); 
      });
  });
};

export default handler;

handler 函数中的第一个参数应该是 NextApiRequest 对象,而不是 NextApiResponse 对象:

const handler = async (req: NextApiRequest, res: NextApiResponse): Promise<void> => { //...

由于 req 应该是第一个参数,因此传递 res 意味着在 NextApiRequest 对象上调用 end — 一个错误,因为 end 那里不存在。