Skip to content

souvc/poetry-backend

Repository files navigation

诗词小程序后端API

基于 Vercel + Next.js + PostgreSQL 技术栈的诗词小程序后端服务。

技术栈

  • 框架: Next.js 14 (App Router)
  • 数据库: PostgreSQL (Vercel Postgres)
  • 部署: Vercel
  • 认证: JWT
  • 语言: TypeScript

功能特性

核心功能

  • ✅ 用户认证 (注册/登录/JWT)
  • ✅ 作品管理 (诗词列表/详情/搜索)
  • ✅ 作者管理 (作者列表/详情/作品)
  • ✅ 引语管理 (引语列表/随机引语)
  • ✅ 朝代管理 (朝代列表/朝代作品)
  • ✅ 合集管理 (合集列表/合集作品)
  • ✅ 分页支持
  • ✅ 搜索功能
  • ✅ CORS支持

API接口

认证相关

  • POST /api/v1/auth/register - 用户注册
  • POST /api/v1/auth/login - 用户登录
  • GET /api/v1/auth/me - 获取当前用户信息

作品相关

  • GET /api/v1/works - 获取作品列表
  • GET /api/v1/works/:id - 获取作品详情

作者相关

  • GET /api/v1/authors - 获取作者列表
  • GET /api/v1/authors/:id - 获取作者详情
  • GET /api/v1/authors/:id/works - 获取作者作品

引语相关

  • GET /api/v1/quotes - 获取引语列表
  • GET /api/v1/quotes/random - 获取随机引语

朝代相关

  • GET /api/v1/dynasties - 获取朝代列表
  • GET /api/v1/dynasties/by-name/:name/works - 获取某朝代作品
  • GET /api/v1/dynasties/by-name/:name/authors - 获取某朝代作者

合集相关

  • GET /api/v1/collections - 获取合集列表
  • GET /api/v1/collections/:id/works - 获取合集作品
  • GET /api/v1/collection-kinds - 获取合集类型

快速开始

1. 安装依赖

npm install

2. 环境配置

创建 .env.local 文件:

# 数据库配置
POSTGRES_URL="your-postgres-connection-string"
POSTGRES_HOST="localhost"
POSTGRES_PORT="5432"
POSTGRES_DATABASE="poetry_db"
POSTGRES_USER="postgres"
POSTGRES_PASSWORD="your-password"

# JWT密钥
JWT_SECRET="your-jwt-secret-key"

3. 初始化数据库

  • 使用提供的 SQL 脚本创建表结构与索引:
psql "$POSTGRES_URL" -f scripts/schema.sql

4. 开发运行

npm run dev

5. 构建部署

npm run build
npm start

数据库结构

参考 scripts/schema.sql

API响应格式

成功响应

{
  "code": 200,
  "message": "success",
  "data": {},
  "timestamp": "2024-01-01T00:00:00.000Z"
}

分页响应

{
  "code": 200,
  "message": "success",
  "data": [],
  "pagination": {
    "total": 100,
    "page": 1,
    "page_size": 20,
    "total_pages": 5
  },
  "timestamp": "2024-01-01T00:00:00.000Z"
}

错误响应

{
  "code": 400,
  "message": "错误信息",
  "data": null,
  "timestamp": "2024-01-01T00:00:00.000Z"
}

部署到Vercel

  1. 将代码推送到GitHub
  2. 在Vercel中导入项目
  3. 配置环境变量
  4. 部署

Vercel环境变量

  • POSTGRES_URL - PostgreSQL连接字符串
  • JWT_SECRET - JWT密钥

开发指南

添加新的API路由

  1. src/app/api/v1/ 下创建对应的路由文件
  2. 使用 createResponsecreateErrorResponse 统一响应格式
  3. 添加适当的错误处理

数据库查询

使用 @vercel/postgres 的模板字符串语法:

const result = await db`
  SELECT * FROM works WHERE id = ${id}
`;

认证中间件

对于需要认证的接口,使用 authMiddleware

import { authMiddleware } from '@/lib/auth';

export async function GET(request: NextRequest) {
  const authResult = await authMiddleware(request);
  if (authResult instanceof NextResponse) {
    return authResult;
  }
  // 处理业务逻辑
}

许可证

MIT License

About

一款基于 Vercel + Next.js + PostgreSQL 技术栈的诗词小程序后端服务

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published