当前位置: 首页 > news >正文

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. 扩展功能

  1. JWT 认证:安装 @nestjs/passportpassport-jwt
  2. Swagger 文档:安装 @nestjs/swagger,自动生成 API 文档。
  3. 日志与监控:使用 nestjs-pino@nestjs/schedule

总结

  • 技术栈:NestJS + TypeORM + MySQL(或 MongoDB)。
  • 优势:全 TypeScript 开发,前后端代码风格一致。
  • 适合场景:中小型后台管理系统,需快速开发且易于维护。

如果需要更具体的功能(如文件上传、权限控制),可以进一步扩展!

http://www.dtcms.com/a/545413.html

相关文章:

  • Apache Spark算法开发指导-特征转换-StandardScaler
  • 两个2的n次幂相加
  • 实时Java规范(RTSJ):从理论到实践的实时系统编程范式
  • 【Linux网络】进程间关系与守护进程
  • 建设部网站监理工程师报名wordpress菜单修改
  • vue 做网站 seo大连网站设计培训班
  • 【含文档+PPT+源码】基于SpringBoot和Vue的服装在线搭配及销售管理系统
  • 数据结构入门:深入理解顺序表与链表
  • 网站怎么做百度推广课题组网站怎么做
  • 前端React实战项目 全球新闻发布系统
  • 【React】 严格模式的 “双重执行” 机制,useEffect 执行两次
  • 使用 ngrok 在本地测试 Paddle Webhook 教程
  • React 入门 01:快速写一个React的HelloWorld项目
  • 地方旅游网站建设必要性网站怎么做站内美化
  • 设计网站栏目wordpress 三一重工
  • 黄冈网站建设策划海口建网站公司
  • 电子元器件学习-DC-DC篇:原理、拓扑结构、参数接收、手册解读、外围器件选型、Layout设计案例分析
  • SSD和HDD存储应该如何选择?
  • wordpress 博客 免费主题哈尔滨关键词优化方式
  • 河北网站排名网站内置字体
  • Yocto —— Linux Kernel 配置和修改
  • Rust结构体:数据组织的优雅范式与实例化实践
  • 【Harmony】鸿蒙相机拍照使用简单示例
  • 论文笔记:“Mind the Gap Preserving and Compensating for the Modality Gap in“
  • 国产光学软件突破 | 3D可视化衍射光波导仿真
  • 仓颉语言中的Option类型与空安全处理:深度解析与实践
  • 无穷级数概念
  • mysql的事务、锁以及MVCC
  • [Dify 实战] 使用插件实现内容抓取与格式转换流程:从网页到结构化输出的自动化方案
  • 李宏毅机器学习笔记35