nestjs midwayjs darukjs 都是基于Ioc设计的
import { Get, Controller, Render } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
@Render('index')
render() {
const message = this.appService.getHello();
return { message };
}
}
概念
如依赖项注入、装饰器、异常过滤器、管道、保护和拦截器
Controller
Handlers 处理程序/端点
装饰器和普通对象
@Request() |
req |
---|---|
@Response() @Res()* |
res |
@Next() |
next |
@Session() |
req.session |
@Param(key?: string) |
req.params / req.params[key] |
@Body(key?: string) |
req.body / req.body[key] |
@Query(key?: string) |
req.query / req.query[key] |
@Headers(name?: string) |
req.headers / req.headers[name] |
@Ip() |
req.ip |
DTO(数据传输对象)模式。DTO是一个对象,它定义了如何通过网络发送数据。
Provider
Provider 只是一个用 @Injectable() 装饰器注释的类
许多基本的 Nest 类可能被视为 provider - service, repository, factory, helper 等等。 他们都可以通过 constructor 注入依赖关系
依赖注入(DI)
Module
Middleware
中间件是在路由处理程序 之前 调用的函数。
中间件函数可以执行以下任务:
- 执行任何代码。
- 对请求和响应对象进行更改。
- 结束请求-响应周期。
- 调用堆栈中的下一个中间件函数。
- 如果当前的中间件函数没有结束请求-响应周期, 它必须调用
next()
将控制传递给下一个中间件函数。否则, 请求将被挂起。Exception filters
Pipes
Guards
Interceptors
拦截器
decorator
装饰器
IoC
DI
技术
配置
缓存
验证
消息队列
Nest 提供了@nestjs/bull包,这是Bull包的一个包装器,Bull 是一个流行的、支持良好的、高性能的基于 Nodejs 的消息队列系统应用。该包将 Bull 队列以 Nest 友好的方式添加到你的应用中。
MVC
序列化
日志
文件上传
定时任务
SQL(TypeORM)
TypeORM 无疑是 node.js 世界中最成熟的对象关系映射器(ORM )。由于它是用 TypeScript 编写的,所以它在 Nest 框架下运行得非常好。
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export default class Movie {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ unique: true })
name: string;
@Column({ type: 'int', nullable: true, width: 4 })
releaseYear: number;
@Column({ type: 'int', nullable: true })
rating: number;
}
Mongoose
SQL (Sequelize)
CRUD生成器
OpenAPI (Swagger)
安全
Authentication
- JWT
Authorization 授权
- Basic RBAC implementation
- Integrating CASL
Encryption and Hashing
加密 ```java import { createCipheriv, randomBytes } from ‘crypto’; import { promisify } from ‘util’;
const iv = randomBytes(16); const password = ‘Password used to generate key’;
// The key length is dependent on the algorithm. // In this case for aes256, it is 32 bytes. const key = (await promisify(scrypt)(password, ‘salt’, 32)) as Buffer; const cipher = createCipheriv(‘aes-256-ctr’, key, iv);
const textToEncrypt = ‘Nest’; const encryptedText = Buffer.concat([ cipher.update(textToEncrypt), cipher.final(), ]);
**哈希**
```java
import * as bcrypt from 'bcrypt';
const saltOrRounds = 10;
const password = 'random_password';
const hash = await bcrypt.hash(password, saltOrRounds);
CORS
CSRF Protection
Rate limiting
FAQ
微服务
默认情况下,微服务通过 TCP协议 监听消息。
优势
- Built-in support for microservices & transport layers like TCP, gRPC, MQTT, RabbitMQ
Redis
MQTT
RabbitMQ
gRPC
对比
和 koa 对比
https://www.zhihu.com/question/323525252/answer/690250788
midway
https://github.com/midwayjs/midway/blob/serverless/README.zh-cn.md
Midway Serverless 是一个用于构建 Node.js 云函数的 Serverless 框架,可以帮您在云原生时代更专注于产品开发,降低维护成本。
spring boot 对比
https://medium.com/better-programming/node-js-vs-spring-boot-which-should-you-choose-2366c2f76587