返回文章列表 →

Note

nestjs

nestjs简单笔记

发布于 更新于

命令

命令 作用 使用场景
npm start 编译并启动 NestJS,修改代码后不会自动重启 普通启动
npm run start:dev 监听源代码变化,修改后自动重新编译、重启 日常开发,最常用
npm run start:debug 在 start:dev 基础上开启 Node.js 调试端口 使用 VS Code 等工具断点调试
npm run start:prod 直接运行已经编译好的 dist/main.js 生产环境
npm run format 使用 Prettier 自动统一代码格式,只格式化代码不启动项目服务器 代码格式化
npm run lint 检查代码规范和潜在错误,并自动修复部分问题,不启动项目服务器 检查代码语法规范
npm run test 使用 Jest 执行单元测试。默认查找类似app.controller.spec.ts,user.service.spec.ts的文件,只运行单元测试不启动项目服务器: 进行单元测试

状态码

响应的默认状态码通常为 200,但 POST 请求除外,其默认状态码为 201。可以使用 @HttpCode(...) 装饰器来修改(从@nestjs/common 包中导入 )

@Post()
@HttpCode(204)
create() {
  return 'This action adds a new cat';
}

规范

  • 文件名、目录名:verification-code,使用 kebab-case。
  • TypeScript 类名:VerificationCode,使用 PascalCase。
  • URL:verification-codes,使用小写复数。
  • 数据库表:user_verification_code,保持 snake_case。

一个模块的执行流程

进入模块的module.ts文件(模块的主文件) => 控制层controller处理请求,调用业务层 => 业务层service处理业务逻辑,调用持久层 => 持久层与数据库交互 => 控制层controller响应数据给客户端

DTO和interface的区别

DTO是接口之间传输的数据模型,DTO是实体(class),编译后依然存在。interface属于typescript语法,用于编写代码时检查类型、IDE 自动补全、编译阶段发现错误等等,只存在于 TypeScript 编译阶段,编译完成后会消失。项目里面可以不写interface,DTO可以取代它的数据类型限制、检查作用。所以存在DTO和interface的数据模型相同的情况下,完全可以不需要写interface,直接用DTO就行了

浏览器地址栏只能发送 GET 请求,不能发送带 JSON body 的 POST 请求。可以在浏览器控制台或者powershell中调试post请求

  • 控制台
fetch("http://localhost:3000/cats/createCat", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "咪咪",
    age: 2,
    breed: "英短",
  }),
})
  .then((response) => response.text())
  .then((result) => console.log(result));
  • powershell
Invoke-RestMethod `
  -Uri "http://localhost:3000/cats/createCat" `
  -Method Post `
  -ContentType "application/json" `
  -Body '{"name":"咪咪","age":2,"breed":"英短"}'

或者使用真正的curl

curl.exe -X POST "http://localhost:3000/cats/createCat" `
  -H "Content-Type: application/json" `
  -d "{\"name\":\"咪咪\",\"age\":2,\"breed\":\"英短\"}"