You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 14 + MongoDB App Router中GET请求报错:res.status不是函数

问题解决:TypeError: res.status is not a function(Next.js App Router + MongoDB)

你的核心问题是混淆了Next.js Pages Router和App Router的API路由写法。App Router(app目录下的route.ts文件)的API函数不使用NextApiRequest/NextApiResponse类型,也没有res参数——它遵循Web标准,直接接收Request对象,并且需要返回Response(或Next.js封装的NextResponse)。

错误原因拆解

你写的两种代码都沿用了Pages Router的API模式:

  • 引入了NextApiRequest/NextApiResponse,但App Router的API函数根本不会传入res参数,你拿到的res是不符合预期的对象,调用res.status()自然会报错。
  • 即便能从数据库获取到数据,错误的响应写法也会触发服务器500错误。

修正后的代码示例

用App Router的正确写法重写你的API:

import User from "../../model/User";
import clientPromise from "../../lib/mongodb";
import { NextResponse } from "next/server";

export async function GET() {
  try {
    await clientPromise;
    const allUsers = await User.find({});
    console.log(allUsers);
    return NextResponse.json(allUsers, { status: 200 });
  } catch (err) {
    console.error(err);
    return NextResponse.json({ error: err.toString() }, { status: 500 });
  }
}

关键改动说明

  • 移除NextApiRequest/NextApiResponse和NextApiHandler的导入,改用NextResponse(Next.js提供的封装,比原生Response更适配框架场景)。
  • 函数不再接收res参数,直接通过NextResponse.json()返回响应,状态码作为第二个参数传入。
  • 统一用try/catch处理异步错误,避免混用await和then/catch,代码逻辑更清晰。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:42:07