NextJS API路由报TypeError: res.status is not a function错误
错误根因
Next.js Pages Router 规范中,API路由的默认导出处理函数必须按固定顺序接收两个参数:
- 第一个参数是请求对象
req,对应类型NextApiRequest - 第二个参数是响应对象
res,对应类型NextApiResponse
你的代码仅声明了1个参数,运行时这个位置拿到的实际是请求对象req,请求对象上不存在status方法,因此抛出TypeError: res.status is not a function错误,该问题和API文件是否放在pages/api目录下无关。同时代码缺失了NextApiRequest的类型导入,存在TypeScript类型校验隐患。
修复方案
调整处理函数的参数顺序,补全缺失的类型导入即可,修正后完整代码如下:
import { NextApiRequest, NextApiResponse } from 'next' import { client } from '../../lib/sanity/sanity' export default async function getFeed(req: NextApiRequest, res: NextApiResponse) { try { const feeds = await client.fetch( `*[_type == "post"] { _createdAt, title, description, picture, postDocId, postedByUserId, postedByUserName, postedByUserImage }` ) return res.status(200).json({ feeds }) } catch (error) { return res.status(500).json({ message: "Couldn't get post feed:\n", error }) } }
可选优化:可以在接口逻辑最开头增加请求方法校验,仅允许指定请求方式访问接口,示例代码:
if (req.method !== 'GET') { return res.status(405).json({ message: '请求方法不被允许' }) }
内容的提问来源于stack exchange,提问作者Ron Bis
相关产品推荐
相关产品推荐

