我正在参与掘金创作者训练营第6期,点击了解活动详情
序
Nest (NestJS)
是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。
对比Express
和Koa
会有更好的TypeScript
开发体验。
本文使用NestJS
官方脚手架nest-cli
搭建后台管理系统的后端项目。
安装nest-cli
nest-cli是Nestjs
的脚手架工具,类似于vue-cli
,不仅可以构建项目,还可以生成各种模板文件
首先,我们需要全局安装nest-cli
,安装之后,输入nest -v
查看版本,检查是否安装成功
npm install -g @nestjs/cli
nest -v
9.1.1
在终端输入nest --help
查看各类命令,可以看到,可以使用nest new
新建项目
使用nest-cli构建项目
在终端输入nest new nest-admin
新建项目,可以选择npm、yarn、pnpm
安装node模块
我们可以选择pnpm
安装
等待安装完成之后,可以在终端输入npm run start
或者 nest start
启动本地项目
命令执行之后,我们打开浏览器,访问localhost:3000
可以看到,项目已经成功运行
我们可以修改main.ts
中的启动端口号,改为3003
后,再次启动项目
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3003);
}
新建接口
新建用户模块
项目初始化完成,尝试着新建第一个接口,新建用户模块,新建一个根据id获取用户信息的接口
首先新建用户模块module
,新建用户模块的controller
,还有接口的具体代码service
// 新建用户module
nest g mo user /modules/user
// 新建用户controller
nest g co user /modules/user
// 新建用户service
nest g s user /modules/user
命令成功运行之后,可以看到src/modules/user
文件夹下多了5个文件,分别为
user.module.ts
user.controller.ts
user.service.ts
user.controller.spec.ts
user.service.spec.ts
修改用户模块代码
在user.controller.ts
新增getUserById
的方法,接口get
请求中的userId
并调用user.service.ts
中的getUserById
方法
代码如下
import { Controller, Get, Param } from '@nestjs/common';
import { UserService } from './user.service';
@Controller('user')
export class UserController {
constructor(private readonly appService: UserService) {}
@Get(':userId')
getUserById(@Param('userId') userId: string) {
return this.appService.getUserById(userId);
}
}
继续修改user.service.ts
,需要一个getUserById
方法接收userId
,返回用户的信息
由于没有使用到数据库,所以直接返回userId
代码如下
import { Injectable } from '@nestjs/common';
@Injectable()
export class UserService {
getUserById(userId: string) {
return `当前用户id:${userId}`
}
}
重启项目,并访问localhost:3003/user/1024
可以看到,已经成功获取到get
请求的userId
创建CURD模块
nest-cli
提供一键生成curd
接口的命令,这样可以更快速的创建接口
打开终端,输入 nest g resource ${模块名称}
,接着选择REST API
,后面继续回车即可
nest g resource users
? What transport layer do you use? REST API
? Would you like to generate CRUD entry points? Yes
可以看到这条命令,不仅生成了controller
和service
的ts文件以外还生成了entity.ts
和dto
相关的ts文件,后续也使用这种方式生成模块,确实更加方便快捷地完成相关功能
重启项目访问localhost:3003/users/123
可以的到一样的效果
最后
立个flag,后续会完善项目,并尝试对接ruoyi-ui,完成整套前后端分离项目