NestJS 项目创建
使用 NestJS 作为后端框架是一个很好的选择,特别是你已经熟悉 Vue3 + TypeScript,因为 NestJS 也是基于 TypeScript 的,学习曲线相对平滑。以下是详细的搭建步骤和关键代码示例:
1. 环境准备
确保已安装:
- Node.js(≥ v16)
- npm / yarn / pnpm
- (可选)数据库(如 MySQL、PostgreSQL 或 MongoDB)
# 全局安装 NestJS CLI
npm install -g @nestjs/cli
2. 创建 NestJS 项目
nest new backend # 创建项目
cd backend
npm run start:dev # 启动开发服务器
访问 http://localhost:3000,看到 Hello World! 说明成功。
3. 项目结构(关键部分)
src/
├── main.ts # 应用入口
├── app.module.ts # 根模块
├── user/ # 示例模块(用户管理)
│ ├── user.controller.ts # 处理 HTTP 请求
│ ├── user.service.ts # 业务逻辑
│ ├── user.entity.ts # 数据模型(TypeORM)
│ └── user.module.ts # 模块定义
4. 核心功能实现
(1) 连接数据库(以 MySQL 为例)
安装 TypeORM 和 MySQL 驱动:
npm install @nestjs/typeorm typeorm mysql2
配置数据库连接(app.module.ts):
import { TypeOrmModule } from '@nestjs/typeorm';@Module({imports: [TypeOrmModule.forRoot({type: 'mysql',host: 'localhost',port: 3306,username: 'root',password: 'your_password',database: 'nestjs_demo',entities: [__dirname + '/**/*.entity{.ts,.js}'],synchronize: true, // 开发环境自动同步表结构(生产环境禁用!)}),],
})
export class AppModule {}
(2) 创建用户模块
生成用户模块:
nest generate module user
nest generate controller user
nest generate service user
定义用户实体(user.entity.ts):
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';@Entity()
export class User {@PrimaryGeneratedColumn()id: number;@Column()username: string;@Column()password: string;
}
用户服务(user.service.ts):
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';@Injectable()
export class UserService {constructor(@InjectRepository(User)private userRepository: Repository<User>,) {}async findAll(): Promise<User[]> {return this.userRepository.find();}async create(user: User): Promise<User> {return this.userRepository.save(user);}
}
用户控制器(user.controller.ts):
import { Controller, Get, Post, Body } from '@nestjs/common';
import { UserService } from './user.service';
import { User } from './user.entity';@Controller('users')
export class UserController {constructor(private readonly userService: UserService) {}@Get()async findAll(): Promise<User[]> {return this.userService.findAll();}@Post()async create(@Body() user: User): Promise<User> {return this.userService.create(user);}
}
(3) 启用 CORS(解决前端跨域问题)
在 main.ts 中启用:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';async function bootstrap() {const app = await NestFactory.create(AppModule);app.enableCors(); // 允许所有跨域请求(生产环境应配置具体域名)await app.listen(3000);
}
bootstrap();
5. 前端调用示例(Vue3 + Axios)
安装 Axios:
npm install axios
调用后端 API(示例):
import axios from 'axios';// 获取用户列表
const fetchUsers = async () => {const response = await axios.get('http://localhost:3000/users');console.log(response.data);
};// 创建用户
const createUser = async () => {await axios.post('http://localhost:3000/users', {username: 'admin',password: '123456',});
};
6. 部署(可选)
- 开发环境:直接运行
npm run start:dev。 - 生产环境:
npm run build npm run start:prod - 推荐部署平台:Vercel、Heroku 或云服务器(Docker + Nginx)。
7. 扩展功能
- JWT 认证:安装
@nestjs/passport和passport-jwt。 - Swagger 文档:安装
@nestjs/swagger,自动生成 API 文档。 - 日志与监控:使用
nestjs-pino或@nestjs/schedule。
总结
- 技术栈:NestJS + TypeORM + MySQL(或 MongoDB)。
- 优势:全 TypeScript 开发,前后端代码风格一致。
- 适合场景:中小型后台管理系统,需快速开发且易于维护。
如果需要更具体的功能(如文件上传、权限控制),可以进一步扩展!
