在应用程序目录中获取 Next.js API 路由会出现 404 Not Found

Eze*_*cho 14 javascript reactjs next.js prisma

我正在努力解决 Next.js 13 的app路由问题。当我尝试访问时,例如从 Postmann 访问时,它总是给出 404 Not Found。

我有这个文件结构:

在此输入图像描述

例如,我的 API 文件之一是:

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

export default async function all(req, res) {
    if (req.method !== 'GET') {
        return res.status(405).json({ error: 'Method not allowed' });
    }

    try {
        // Get all admins using Prisma
        const admins = await prisma.admin.findMany();

        return res.status(200).json(admins);
    }
    catch (error) {
        return res.status(500).json({ error: 'Failed to get admins' });
    }
}
Run Code Online (Sandbox Code Playgroud)

当我发送时,GET localhost:3000/api/admin/all它总是以 404 响应。无法找到错误在哪里。

我尝试了其他文件或文件夹命名。从我自己的应用程序调用,使用curl命令,或使用Postman。我的其他 API 路由也给出相同的 404。

You*_*mar 21

API 路由应位于名为route.js. 意思app/api/admin/all.js应该是app/api/admin/route.js,对应的URL是/api/admin。另外,里面的函数应该使用特定的定义:

export async function GET(request) {}
Run Code Online (Sandbox Code Playgroud)

GET可以替换为POST, PUT,PATCH等。在您的情况下,它将是:

// Notice from where NextResponse is imported:
import { NextResponse } from "next/server";

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

// Notice the funciton definiton:
export async function GET(req) {
  return NextResponse.json(
    { error: "Method not allowed" },
    {
      status: 405
    }
  );
}

// Notice the funciton definiton:
export async function POST(req) {
  try {
    // Get all admins using Prisma
    const admins = await prisma.admin.findMany();

    return NextResponse.json(admins, {
      status: 200,
    });
  } catch (error) {
    return NextResponse.json(
      { error: "Failed to get admins" },
      {
        status: 500,
      }
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这非常有帮助。我正在按照官方文档设置 Vercel Postgres,示例文件名和路径根本没有提到这个“automagic”约定。https://vercel.com/docs/storage/vercel-postgres/quickstart (3认同)