路由器 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
那里不存在。
我不知道为什么,但是如果函数没有报错,它工作得很好,但是当它报错时,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
那里不存在。