logo
0
0
WeChat Login

NestJS SQLite 基础开发架构

基于 NestJS、TypeScript 和 SQLite 构建的基础开发架构,包含用户认证、JWT Token 验证、RESTful API 等功能。

功能特性

  • NestJS 框架 - 现代化的 Node.js 后端框架
  • TypeScript - 类型安全的 JavaScript 超集
  • SQLite 数据库 - 轻量级的嵌入式数据库
  • TypeORM - 强大的 ORM 框架
  • JWT 认证 - 基于 JSON Web Token 的身份验证
  • 用户管理 - 完整的用户注册、登录、管理功能
  • API 验证 - 使用 class-validator 进行数据验证
  • 密码加密 - 使用 bcryptjs 进行密码哈希
  • CORS 支持 - 跨域资源共享配置

项目结构

src/ ├── app.controller.ts # 应用主控制器 ├── app.module.ts # 应用主模块 ├── app.service.ts # 应用主服务 ├── main.ts # 应用入口文件 ├── auth/ # 认证模块 │ ├── auth.controller.ts # 认证控制器 │ ├── auth.module.ts # 认证模块 │ ├── auth.service.ts # 认证服务 │ ├── dto/ # 数据传输对象 │ │ ├── login.dto.ts │ │ └── register.dto.ts │ ├── guards/ # 守卫 │ │ ├── jwt-auth.guard.ts │ │ └── local-auth.guard.ts │ └── strategies/ # 策略 │ ├── jwt.strategy.ts │ └── local.strategy.ts ├── users/ # 用户模块 │ ├── users.controller.ts # 用户控制器 │ ├── users.module.ts # 用户模块 │ ├── users.service.ts # 用户服务 │ ├── dto/ # 数据传输对象 │ │ ├── create-user.dto.ts │ │ └── update-user.dto.ts │ └── entities/ # 实体 │ └── user.entity.ts └── demo/ # 演示模块 ├── demo.controller.ts # 演示控制器 └── demo.module.ts # 演示模块

快速开始

环境要求

  • Node.js >= 16.0.0
  • npm >= 8.0.0

安装依赖

npm install

启动开发服务器

# 开发模式(热重载) npm run start:dev # 生产模式 npm run start:prod # 调试模式 npm run start:debug

应用程序将在 http://localhost:3000 启动。

构建项目

npm run build

API 接口文档

基础接口

健康检查

GET /health

响应示例:

{ "status": "ok", "timestamp": "2024-01-01T00:00:00.000Z", "message": "NestJS SQLite 基础架构运行正常" }

认证接口

用户注册

POST /auth/register Content-Type: application/json { "username": "testuser", "email": "test@example.com", "password": "123456", "firstName": "张", "lastName": "三" }

用户登录

POST /auth/login Content-Type: application/json { "username": "testuser", "password": "123456" }

响应示例:

{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "user": { "id": 1, "username": "testuser", "email": "test@example.com", "firstName": "张", "lastName": "三" } }

用户接口(需要认证)

所有用户接口都需要在请求头中包含 JWT Token:

Authorization: Bearer <your-jwt-token>

获取用户列表

GET /users

获取当前用户信息

GET /users/profile

获取指定用户

GET /users/:id

更新用户信息

PATCH /users/:id Content-Type: application/json { "firstName": "李", "lastName": "四" }

删除用户

DELETE /users/:id

演示接口

公开接口

GET /demo/public

受保护接口(需要认证)

GET /demo/protected Authorization: Bearer <your-jwt-token>

用户信息接口(需要认证)

GET /demo/user-info Authorization: Bearer <your-jwt-token>

数据库

项目使用 SQLite 数据库,数据库文件会自动创建在项目根目录下的 database.sqlite

用户表结构

字段类型说明
idINTEGER主键,自增
usernameVARCHAR用户名,唯一
emailVARCHAR邮箱,唯一
passwordVARCHAR密码(加密存储)
firstNameVARCHAR名字(可选)
lastNameVARCHAR姓氏(可选)
isActiveBOOLEAN是否激活,默认 true
createdAtDATETIME创建时间
updatedAtDATETIME更新时间

文档

环境变量

可以创建 .env 文件来配置环境变量:

# JWT 密钥 JWT_SECRET=your-secret-key # 数据库配置 DATABASE_PATH=database.sqlite

开发指南

添加新的模块

  1. 使用 NestJS CLI 生成模块:
nest generate module feature-name nest generate controller feature-name nest generate service feature-name
  1. app.module.ts 中导入新模块

添加新的实体

  1. 在相应模块的 entities 目录下创建实体文件
  2. app.module.ts 的 TypeORM 配置中添加实体
  3. 重启应用以同步数据库结构

数据验证

使用 class-validator 装饰器进行数据验证:

import { IsEmail, IsNotEmpty, MinLength } from 'class-validator'; export class CreateUserDto { @IsNotEmpty({ message: '用户名不能为空' }) username: string; @IsEmail({}, { message: '邮箱格式不正确' }) email: string; @MinLength(6, { message: '密码长度至少6位' }) password: string; }

部署

生产环境部署

  1. 构建项目:
npm run build
  1. 启动生产服务:
npm run start:prod

Docker 部署

可以创建 Dockerfile 进行容器化部署:

FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY dist ./dist EXPOSE 3000 CMD ["node", "dist/main"]

许可证

ISC

贡献

欢迎提交 Issue 和 Pull Request!

联系方式

如有问题,请通过以下方式联系:

  • 创建 GitHub Issue
  • 发送邮件至项目维护者

注意:这是一个基础开发架构,适合用作项目起点。在生产环境中使用前,请确保:

  1. 更改默认的 JWT 密钥
  2. 配置适当的数据库(如 PostgreSQL、MySQL)
  3. 添加适当的日志记录
  4. 实施适当的错误处理
  5. 添加单元测试和集成测试
  6. 配置适当的安全措施