postgresql API Routes无法在下一个js中工作的问题,(保持404找不到)[I am new] [duplicate]

ttcibm8c  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(86)

此问题在此处已有答案

How do you put api routes in the new app folder of Next.js?(4个答案)
5天前关闭。
我使用的是nextjs 13和vercel提供的postgresql,我创建了一些路由,这里是其中一个示例:get-testcase.ts

import { NextApiRequest, NextApiResponse } from 'next';
import { sql } from '@vercel/postgres';

export default async function handler(
  request: NextApiRequest,
  response: NextApiResponse
) {
  try {
    const { id } = request.query;
    const idString = Array.isArray(id) ? id[0]?.toString() : id?.toString();

    if (!idString) throw new Error('ID is required');

    const { rows } = await sql`SELECT * FROM Testcases WHERE ID = ${idString}`;

    if (rows.length === 0) {
      return response.status(404).json({ error: 'Test case not found' });
    }

    const testCase = rows[0];

    return response.status(200).json({ testCase });
  } catch (error) {
    return response.status(500).json({ error: 'Error fetching test case' });
  }
}

字符串
此文件位于app/API/get-testcase.ts中
一切似乎都是正确的,但每次我尝试使用的路线我得到404找不到。以下是我导航到这条路线时发生的情况:'http://localhost:3000/api/get-testcases' * 图片附在下面,再次404找不到 * x1c 0d1x类似的事情发生在其他postgresql路由上,但我有一些其他路由可以正常工作。
请记住,我是nextjs的新手,所以如果问题是微不足道的,我道歉。
我试着确认项目目录,直接在浏览器上导航到路线,并使用 Postman 金丝雀,查阅了文档,甚至gpt,我似乎找不到问题所在。

tez616oj

tez616oj1#

请参阅Next.js应用路由器文档:
路由处理程序在route.js中定义|应用程序目录中的ts文件:
在您提供的代码示例中,新的“应用路由器”约定与旧的“页面路由器”约定混合在一起。
如果你想使用新的“app router”,你应该将你的处理程序保存为app/api/get-testcase/route.ts,并像这样修改你的导出签名:

export async function GET(request: Request) {}

字符串
其中Request只是原生Node.js Request类。不需要导入NextApiRequest
您也可以使用旧的“页面路由器”。为了做到这一点,只需将处理程序保存为src/api/get-testscase.ts,并保留导出签名,就像你所做的那样:

export default async function handler(
  request: NextApiRequest,
  response: NextApiResponse
)

b1uwtaje

b1uwtaje2#

使用Next 13和应用程序目录,您需要以不同的方式设置目录。必须是:app/api/get-testcase/route.ts的。
此外,您必须导出所需HTTP方法的处理程序,即:

export { handler as GET, handler as POST };

字符串
或单独设置,例如:

export async function GET(request: Request) {
[...]
}

export async function POST(req: Request) {
  const { param } = await req.json()
[...]
}

相关问题