route.ts
基本信息
- 类型: API 路由
- 路径:
./src/app/api/user/profile/route.ts - 路由:
/api/user/profile
概述
用户资料管理接口。支持获取当前用户资料和更新资料信息。
HTTP 方法
- GET: 获取用户资料
- PATCH: 更新用户资料
GET - 获取用户资料
响应
成功 (200)
{
"id": "user_id",
"name": "用户名称",
"username": "username",
"email": "user@example.com",
"avatar": "https://...",
"role": "USER",
"createdAt": "2024-01-01T00:00:00Z"
}
未授权 (401)
{
"error": "unauthorized",
"message": "You must be logged in"
}
未找到 (404)
{
"error": "not_found",
"message": "User not found"
}
PATCH - 更新用户资料
Body 参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 显示名称,1-100 字符 |
| username | string | 是 | 用户名,1-30 字符,只允许字母、数字、下划线 |
| avatar | string | 否 | 头像 URL |
| bio | string | 否 | 个人简介,最多 250 字符 |
| customLinks | array | 否 | 自定义链接,最多 5 个 |
customLinks 结构
{
type: "website" | "github" | "twitter" | "linkedin" | "instagram" |
"youtube" | "twitch" | "discord" | "mastodon" | "bluesky" | "sponsor",
url: string, // 链接 URL
label?: string // 可选标签,最多 30 字符
}
响应
成功 (200)
返回更新后的用户资料
错误
未授权 (401)
{
"error": "unauthorized",
"message": "You must be logged in"
}
验证失败 (400)
{
"error": "validation_error",
"message": "Invalid input",
"details": [...]
}
用户名已被使用 (400)
{
"error": "username_taken",
"message": "This username is already taken"
}
服务器错误 (500)
{
"error": "server_error",
"message": "Something went wrong"
}
依赖
next/server- Next.js 服务器组件zod- 输入验证@prisma/client- Prisma 客户端@/lib/auth- 认证@/lib/db- Prisma 数据库客户端
权限
- 需要登录
- 用户只能修改自己的资料
验证规则
- 用户名只能包含字母、数字和下划线
- 自定义链接最多 5 个
- 链接类型必须是预定义类型之一
- 所有 URL 必须是有效的 URL 格式