如何在Next.js API中配置多路由?账户API路由搭建求助
Next.js API 路由结构解决方案
针对你需要的三个API需求,Next.js(App Router)的标准做法是按资源维度组织路由,结合动态路由处理带ID的请求,具体结构和代码如下:
路由文件结构
app/ └── api/ └── accounts/ ├── route.ts # 处理「获取所有账户」「创建账户」 └── [id]/ └── route.ts # 处理「按ID获取单个账户」
代码实现
1. 处理批量查询与创建(app/api/accounts/route.ts)
import { NextResponse } from 'next/server'; // GET 请求:获取所有账户 export async function GET() { // 替换为你的数据库查询逻辑(比如 Prisma、MongoDB 操作) const accounts = await fetchAllAccountsFromDB(); return NextResponse.json(accounts); } // POST 请求:创建新账户 export async function POST(request: Request) { const accountData = await request.json(); // 替换为你的数据库插入逻辑 const newAccount = await createAccountInDB(accountData); // 返回201状态码表示资源创建成功 return NextResponse.json(newAccount, { status: 201 }); } // 示例模拟函数(实际项目中删除) async function fetchAllAccountsFromDB() { return [{ id: '1', name: '个人账户' }, { id: '2', name: '企业账户' }]; } async function createAccountInDB(data: any) { return { id: Date.now().toString(), ...data }; }
2. 处理单账户查询(app/api/accounts/[id]/route.ts)
import { NextResponse } from 'next/server'; // GET 请求:按ID获取单个账户 export async function GET( _request: Request, { params }: { params: { id: string } } ) { const accountId = params.id; // 替换为你的数据库单条查询逻辑 const account = await fetchAccountByIdFromDB(accountId); if (!account) { return NextResponse.json({ error: '账户不存在' }, { status: 404 }); } return NextResponse.json(account); } // 示例模拟函数(实际项目中删除) async function fetchAccountByIdFromDB(id: string) { return id === '1' ? { id: '1', name: '个人账户' } : null; }
对应请求端点
- 获取所有账户:
GET /api/accounts - 创建新账户:
POST /api/accounts(请求体携带账户数据) - 按ID获取账户:
GET /api/accounts/{id}(替换{id}为实际账户ID)
关键说明
- Next.js Route Handlers 要求同一个文件中同名HTTP方法只能有一个,因此不能在
accounts/route.ts中写两个GET函数,必须用动态路由[id]拆分单资源查询逻辑。 - 这种结构符合RESTful API设计规范,按资源(accounts)聚合相关操作,更易维护。
内容的提问来源于stack exchange,提问作者Kevin Jaynes
相关产品推荐
相关产品推荐

