此问题在此处已有答案:
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,我似乎找不到问题所在。
2条答案
按热度按时间tez616oj1#
请参阅Next.js应用路由器文档:
路由处理程序在route.js中定义|应用程序目录中的ts文件:
在您提供的代码示例中,新的“应用路由器”约定与旧的“页面路由器”约定混合在一起。
如果你想使用新的“app router”,你应该将你的处理程序保存为
app/api/get-testcase/route.ts
,并像这样修改你的导出签名:字符串
其中
Request
只是原生Node.js Request类。不需要导入NextApiRequest
。您也可以使用旧的“页面路由器”。为了做到这一点,只需将处理程序保存为
src/api/get-testscase.ts
,并保留导出签名,就像你所做的那样:型
b1uwtaje2#
使用Next 13和应用程序目录,您需要以不同的方式设置目录。必须是:
app/api/get-testcase/route.ts
的。此外,您必须导出所需HTTP方法的处理程序,即:
字符串
或单独设置,例如:
型