NestJS
约 2 分钟阅读
- nestjs/nestGitHubnestjs/nestnestjs/nest · 设计来自 Angular + SpringFramework · http-errors · 核心概念 · Module · - · Controller · request -> response · - · , - , ,笔记:NestJS
- 设计来自 Angular + SpringFramework
- http-errors
- 核心概念
- Module
@Module()
- Controller
- request -> response
@Controller('user/me')@Get(),@Post-@HttpCode(204),@Header('Cache-Control', 'none'),@Redirect('https://nestjs.com', 301)@Request(),@Req() req: Request@Response(),@Res() res: Response@Param(key?: string)- req.params@Body(key?: string)- req.body@Query(key?: string)- req.query@Headers(name?: string)- req.headers@Next() next@Ip()- req.ip@HostParam()- req.hosts@Session()
- Provider
@Injectable()@Optional(),@Inject(key?:string)
- Middleware
- Exception filter
- Pipe
- Guard
- Interceptor
- decorator
- Module
- 特性
- 底层平台无关 - 默认 Express,可用 Fastify
- 支持 GraphQL、WebSocket
- combine your config and your code seamlessly by making use of TypeScript decorators
- 集成
- NextJS
- nestjs/nest#1122GitHub Issuenestjs/nest#1122
- kyle-mccarthy/nest-nextGitHubkyle-mccarthy/nest-next
- 因为 Next 可能在构建时有一些请求,两者共存可能会有些问题
- 可能前后端分离更好
- 数据库
@nestjs/typeorm@nestjs/sequelize
- 配置
@nestjs/config- dotenv
- 校验
- class-validatornpm Packageclass-validatorNPM
- 缓存
- cache-managernpm Packagecache-managerNPM - Flexible NodeJS cache module
- 序列化
- class-transformernpm Packageclass-transformerNPM
- 任务调度
- 安全
- helmetnpm PackagehelmetNPM
- CSRF csurfnpm PackagecsurfNPM
- 限流 express-rate-limitnpm Packageexpress-rate-limitNPM
- 队列
@nestjs/bull- bull
- 日志
- 文件上传
- HTTP 客户端
- axios
- GraphQL
@nestjs/graphql@nestjs/apollo- apollo-server-express
@nestjs/mercurius
- NextJS
📂 src
├─ 📄 app.controller.spec.ts
├─ 📄 app.controller.ts
├─ 📄 app.module.ts
├─ 📄 app.service.ts
└─ 📄 main.tsGraphQL
# Express + Apollo 默认
npm i @nestjs/graphql @nestjs/apollo @apollo/server graphql
# Fastify + Apollo
npm i @nestjs/graphql @nestjs/apollo @apollo/server @as-integrations/fastify graphql
# Fastify + Mercurius
npm i @nestjs/graphql @nestjs/mercurius graphql mercuriusPackages@nestjs/graphqlnpm Package@nestjs/graphqlNPM@nestjs/apollonpm Package@nestjs/apolloNPM@apollo/servernpm Package@apollo/serverNPMgraphqlnpm PackagegraphqlNPM@as-integrations/fastifynpm Package@as-integrations/fastifyNPM@nestjs/mercuriusnpm Package@nestjs/mercuriusNPMmercuriusnpm PackagemercuriusNPM
Standalone
作为 IoC 容器
- @nestjs/core
- 172.1kB, 43.9kB
- @nestjs/common
- 86.9kB, 19.4kB
import { NestFactory } from '@nestjs/core';
const app = await NestFactory.createApplicationContext(AppModule);
const userService = app.get(UserService);
await app.close();FAQ
Reflection metadata 'design' returning undefined
- 需要 emitDecoratorMetadata
- esbuild 不支持 emitDecoratorMetadata,swc 支持
# 推荐 swc + tsx
pnpm swc --watch ./src -d ./dist/out
pnpm tsx watch ./dist/out/main.js
# 或 ts-node
ts-node --esm --swc关联信息
反向链接、本文链接的其他页面和外部资料。
反向链接
- JavaScript Awesome笔记 · nestjs
novnc/noVNC · felixrieseberg/macintosh.js · RobinCsl/awesome-js-tooling-not-in-js · sorrycc/awesome-javascript · CLI / Table
- nestia笔记 · NestJS
基于 NestJS · 生成类似 tRPC 的客户端 · 使用 ts-patch 注入自定义 ts 插件实现高级功能 · 使用 typia · tsconfig.json
- Nodejs Awesome笔记 · nestjs
最好选择 TypeScript 开发的或支持 TypeScript 的 · TypeScript 的 decorator 比 Java 的 Annotation 弱得多 · 不支持获取字段实际类型信息 - 因为不存在这样的信息 · 最近一两年 (2020-2021),可能是因为 Go 和 Rust 的盛行,导致 Nodejs 的后端开发弱化了,很多项目...
References
GitHub5 条
- expressjs/multergithub.com/expressjs/multer
- kyle-mccarthy/nest-nextgithub.com/kyle-mccarthy/nest-next
- nestjs/nestgithub.com/nestjs/nest
- nestjs/nest#1122github.com/nestjs/nest/issues/1122
- winstonjs/winstongithub.com/winstonjs/winston
Packages7 条
- cache-managerwww.npmjs.com/package/cache-manager
- class-transformerwww.npmjs.com/package/class-transformer
- class-validatorwww.npmjs.com/package/class-validator
- csurfwww.npmjs.com/package/csurf
- express-rate-limitwww.npmjs.com/package/express-rate-limit
- helmetwww.npmjs.com/package/helmet
- node-cronwww.npmjs.com/package/node-cron