前言
沉默了很久,最终决定通过空闲时间入手Nest.js的学习。由于是刚入坑(新手村),所有选择博客系统来磨炼自身。这也是我第一次在掘金写文章做笔记。如有不足之处望金友们海涵,如若能指点一二,小生不胜受恩感激。
Nest(NestJS)是一个用于构建高效、可扩展 Node.js 服务器端应用程序的框架。它使用渐进式的JavaScript,完全支持并构建于 TypeScript 上(同时仍然允许开发者使用纯JavaScript进行编码),结合了面向对象编程(OOP)、函数式编程(FP)和函数响应式编程(FRP)的元素。 在内部,Nest使用强大的HTTP服务器框架,如 Express(默认)并且可以选择配置为使用 Fastify! Nest在这些常见的Node.js框架(Express/Fastify)之上提供了一层抽象,同时也直接向开发者暴露了它们的API。这使得开发者可以自由使用众多为底层平台提供的第三方模块。
项目技术栈
- NestJs
- TypeORM、Mysql
- Redis
- Minio
- JWT
- React全家桶(后台管理)
- Vue3全家桶(前台管理)
努力使自己变优秀,然后骄傲的生活;要一直保持自己喜欢的样子,不要随波逐流,也不要过度失落。温柔的人,一定会有一个好的结局
部署
- docker
- 服务器
安装全局脚手架 NEST CLI
shell
npm i -g @nestjs/cli
初始化项目
shell
nest new nest_vhen_blog
运行项目
shell
npm run start:dev
- 创建模块
shell
nest g mo modules/user
- 创建控制器
shell
nest g co modules/user
- 创建服务
shell
nest g s modules/user
- 生成所有的NestJS构建块(模块、服务、控制器类),还生成实体类、DTO类以及测试(
.spec
)文件
shell
nest g resource modules/user
# RESTful 风格
- 查询--GET
- 提交--POST
- 更新--PUT/PATCH
- 删除--DELETE
RESTful 版本控制
- URI Versioning :版本将在请求的 URI 中传递(默认)
- Header Versioning :自定义请求标头将指定版本
- Media Type Versioning :请求的
Accept
标头将指定版本
ts
import { NestFactory } from '@nestjs/core';
import { VersioningType } from '@nestjs/common';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableVersioning({
type: VersioningType.URI,
})
await app.listen(3000);
}
bootstrap();
- user.controller 配置版本
ts
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
@Controller({
path: "user",
version: '1'
})
// @Controller('user')
export class UserController {
constructor(private readonly userService: UserService) { }
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.userService.create(createUserDto);
}
@Get()
// @Version('1')
findAll() {
return this.userService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.userService.findOne(+id);
}
@Patch(':id')
update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
return this.userService.update(+id, updateUserDto);
}
@Delete(':id')
remove(@Param('id') id: string) {
return this.userService.remove(+id);
}
}
项目地址:nest_vhen_blog