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

Next.js中GET请求遇405 Method Not Allowed错误(Postman/浏览器)

问题原因与解决方案

核心问题

HTTP 405错误是因为你的/api/products路由没有实现GET请求的处理函数。在Next.js App Router的API路由中,只有显式导出的GET/POST等方法函数才会被框架识别并处理对应请求,你当前只导出了POST函数,所以GET请求会被拒绝。

另外你写的fecthProducts(注意拼写错误,应为fetch)是普通内部函数,既没被Next.js识别为GET请求处理器,还错误地在API路由内部用axios请求自身API,这完全没必要。

修正代码

把原来的fecthProducts函数替换成导出的GET函数,直接在函数内查询数据库并返回数据:

import { dbConnect } from "@/app/config/dbConnect";
import { NextResponse } from "next/server";
import ProductModel from "@/app/model/addProduct";

dbConnect();

// POST 请求处理
export async function POST(req) {
  try {
    const body = await req.json();
    const newProduct = await ProductModel.create(body);
    return NextResponse.json({
      success: true,
      data: newProduct, // 建议把message改成data,语义更准确
    });
  } catch (error) {
    if (error.code === 11000) {
      return NextResponse.json({
        success: false,
        message: "产品已存在!",
      });
    }
    return NextResponse.json({
      success: false,
      message: error.message.split(":")[2]?.trim().split(",")[0] || "查询失败",
    });
  }
}

// GET 请求处理(新增)
export async function GET() {
  try {
    // 直接查询数据库获取所有产品
    const products = await ProductModel.find({});
    return NextResponse.json({
      success: true,
      data: products,
    });
  } catch (error) {
    return NextResponse.json({
      success: false,
      message: "获取产品列表失败:" + error.message,
    });
  }
}

关键改动说明

  1. 导出GET函数:这是Next.js识别GET请求的核心,框架会自动将该函数绑定到GET请求的处理逻辑上。
  2. 直接操作数据库:API路由内部无需通过axios请求自身接口,直接调用ProductModel查询数据即可,减少不必要的网络请求。
  3. 修复拼写错误:修正fecthProducts的拼写问题,保证代码规范。
  4. 优化响应语义:将返回数据的message字段改为data,让接口语义更清晰。

现在用Postman或浏览器访问/api/products的GET请求,就能正常获取MongoDB中的产品数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:36:07