我正在使用应用程序路由器(/App/api/)进行Next.js 15项目,并试图实现一个动态的api路由(/api/agents/[id]),以从MongoDB获取特定的代理。
然而,在npm运行构建过程中,我遇到了这个TypeScript错误:
src/app/api/agents/[id]/route.ts
类型错误:路由“src/app/api/agents/[id]/Route.ts”的“GET”导出无效:
类型“{params:{id:string;};}”不是函数第二个参数的有效类型。
到目前为止我所尝试的:
-
修改了GET、PATCH和DELETE请求的函数签名:
export async function GET(req: NextRequest, context: { params: { id: string } }) {
仍然收到无效的GET导出错误。
-
将参数类型更改为记录<string,string>:
export async function GET(req: NextRequest, context: { params: Record<string, string> }) {
运气不好。
-
尝试将参数包装在可选对象中:
export async function GET(req: NextRequest, context: { params?: { id?: string } }) {
仍然会出现同样的错误。
-
检查tsconfig.json中的TypeScript兼容性:
"target": "esnext",
"module": "esnext",
"strict": true,
没有改善。
-
在使用之前尝试等待参数:
const { id } = await context.params;
仍然不起作用。
以下是我的API路线代码(/app/API/agents/[id]/Route.ts)
import { NextRequest, NextResponse } from "next/server";
import { connectToDatabase } from "@/utils/db";
import Agency from "@/models/agency";
import mongoose from "mongoose";
// Helper function for error responses
const errorResponse = (message: string, status: number) => {
return NextResponse.json({ error: message }, { status });
};
// GET: Fetch a Single Agency by ID (Fails on Build)
export async function GET(
req: NextRequest,
context: { params: { id: string } }
) {
try {
await connectToDatabase();
// Validate ID format
if (!context.params || !context.params.id || !mongoose.isValidObjectId(context.params.id)) {
return errorResponse("Invalid agency ID", 400);
}
const agency = await Agency.findById(context.params.id).lean();
if (!agency) {
return errorResponse("Agency not found", 404);
}
return NextResponse.json({ ...agency, id: String(agency._id) });
} catch (error) {
console.error("â Error fetching agency:", error);
return errorResponse("Failed to fetch agency", 500);
}
}
我的环境:
-
Next.js版本:15.1.6
-
Node.js版本:22
-
TypeScript版本:5.4
-
数据库:MongoDB(Mongoose ORM)
任何见解都将不胜感激!