# nest-crud-demo **Repository Path**: OrzR3/nest-crud-demo ## Basic Information - **Project Name**: nest-crud-demo - **Description**: nest.js学习 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-04-07 - **Last Updated**: 2025-04-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NestJS 学习项目 ## 说明 NestJS项目,一个关于用户表的增删改查demo,涉及环境变量配置、过滤器拦截等 数据库:MongoDB 接口文档:Swagger ## 环境要求 Node.js 18.x.x 及以上版本 本人使用Node.js版本: 18.19.0 ## 安装依赖 ```bash npm i ``` ## 启动项目 ```bash # 开发环境启动 (监听文件变化,常用) npm run start:dev # 生产境启动 npm run start:prod ``` ## 项目打包 ```bash # 生产打包 npm run build ``` ## 开发常用命令 ```bash # 使用以下命令需要先全局安装@nestjs/cli npm i -g @nestjs/cli # 创建 Module nest g mo xxx server # 创建 Controller nest g co xxx server # 创建 Service(Provider) nest g s xxx server ``` ## 环境变量配置 1.下载依赖 ```bash npm i @nestjs/config npm i -D cross-env ``` 2.修改package.json,为启动和打包项目命令加入对应的环境变量 ```json // 修改前 "build": "nest build", "start": "nest start", "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", ``` ```json // 修改后 "build": "cross-env NODE_ENV=prod nest build", "start": "cross-env NODE_ENV=dev nest start", "start:dev": "cross-env NODE_ENV=dev nest start --watch", "start:debug": "cross-env NODE_ENV=dev nest start --debug --watch", "start:prod": "cross-env NODE_ENV=prod node dist/main", ``` 3.创建env文件夹,并新增.env、.env.dev、.env.prod、env.test文件分别对应全局、开发、生产、测试的环境变量并写入对应的配置 ```bash # /env/.env PROJECT_NAME=NEST_CRUD_DEMO GLOBAL_PREFIX=api ``` 4.app.module.ts中写入配置 ```typescript import { ConfigModule, ConfigService } from '@nestjs/config'; @Module({ imports: [ ConfigModule.forRoot({ envFilePath: ['env/.env', `env/.env.${process.env.NODE_ENV}`], isGlobal: true }), // ...省略其它配置 ] }) ``` 4.在 main.ts 中写入配置 ```typescript import { ConfigModule, ConfigService } from '@nestjs/config'; async function bootstrap() { const app = await NestFactory.create(AppModule); // 获取配置服务 const configService = app.get(ConfigService); // 使用示例:根据环境变量设置全局路由前缀 const prefix = configService.get('GLOBAL_PREFIX'); app.setGlobalPrefix(prefix); // ...其它省略 } bootstrap(); ``` ## 过滤器 1.首先使用命令创建一个过滤器 ```bash nest g filter core/filter/http-exception ``` 2.编写代码 ```typescript // http-exception.filter.ts import { ArgumentsHost, Catch, ExceptionFilter, HttpException } from '@nestjs/common'; import { CommonResult } from 'src/common/CommonResult'; import HTTP_STATUS_MSG_MAP from 'src/common/HttpStatusMsgMap'; /** * 过滤器 * 拦截错误请求 */ @Catch(HttpException) export class HttpExceptionFilter implements ExceptionFilter { catch(exception: HttpException, host: ArgumentsHost) { const ctx = host.switchToHttp(); // 获取请求上下文 const response = ctx.getResponse(); // 获取请求上下文中的 response对象 const status = exception.getStatus(); // 获取异常状态码 // 设置返回的状态码, 请求头,发送错误信息 response.status(status); response.header('Content-Type', 'application/json; charset=utf-8'); response.send( CommonResult.error(HTTP_STATUS_MSG_MAP[status] || '服务异常,操作失败') ); } } ``` 3.在 main.ts 中全局注册 ```typescript import { HttpExceptionFilter } from './core/filter/http-exception/http-exception.filter'; async function bootstrap() { const app = await NestFactory.create(AppModule); // 注册全局过滤器 拦截错误 app.useGlobalFilters(new HttpExceptionFilter()); // ...其它省略 } bootstrap(); ``` ## 参考博客链接 [学完这篇 Nest.js 实战,还没入门的来锤我!(长文预警)](https://juejin.cn/post/7032079740982788132#heading-20) [Nestjs(二)——CRUD](https://blog.csdn.net/weixin_43363871/article/details/113771545?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172187372716800186542598%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=172187372716800186542598&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-113771545-null-null.nonecase&utm_term=nest&spm=1018.2226.3001.4450)