专注app软件定制开发小满nestjs(第十二章 nestjs 中间件)

中间件

专注app软件定制开发中间件是在路由处理程序 之前 专注app软件定制开发调用的函数。 中间件函数可以访问请求和响应对象

中间件函数可以执行以下任务:

  • 执行任何代码。
  • 对请求和响应对象进行更改。
  • 结束请求-响应周期。
  • 调用堆栈中的下一个中间件函数。
  • 如果当前的中间件函数没有结束请求-响应周期, 它必须调用 next() 将控制传递给下一个中间件函数。否则, 请求将被挂起。

1.创建一个依赖注入中间件

要求我们实现use 函数 返回 req res next 参数 如果不调用next 程序将被

  1. import {Injectable,NestMiddleware } from '@nestjs/common'
  2. import {Request,Response,NextFunction} from 'express'
  3. @Injectable()
  4. export class Logger implements NestMiddleware{
  5. use (req:Request,res:Response,next:NextFunction) {
  6. console.log(req)
  7. next()
  8. }
  9. }

使用方法 在模块里面 实现 configure 返回一个消费者  consumer 通过 apply 注册中间件 通过forRoutes 指定  Controller 路由

  1. import { Module,NestModule,MiddlewareConsumer } from '@nestjs/common';
  2. import { UserService } from './user.service';
  3. import { UserController } from './user.controller';
  4. import { Logger } from 'src/middleware';
  5. @Module({
  6. controllers: [UserController],
  7. providers: [UserService],
  8. exports:[UserService]
  9. })
  10. export class UserModule implements NestModule{
  11. configure (consumer:MiddlewareConsumer) {
  12. consumer.apply(Logger).forRoutes('user')
  13. }
  14. }

也可以指定 拦截的方法 比如拦截GET  POST 等 forRoutes 使用对象配置

  1. import { Module,NestModule,MiddlewareConsumer,RequestMethod } from '@nestjs/common';
  2. import { UserService } from './user.service';
  3. import { UserController } from './user.controller';
  4. import { Logger } from 'src/middleware';
  5. @Module({
  6. controllers: [UserController],
  7. providers: [UserService],
  8. exports:[UserService]
  9. })
  10. export class UserModule implements NestModule{
  11. configure (consumer:MiddlewareConsumer) {
  12. consumer.apply(Logger).forRoutes({path:'user',method:RequestMethod.GET})
  13. }
  14. }

你甚至可以直接吧 UserController 塞进去

  1. import { Module,NestModule,MiddlewareConsumer,RequestMethod } from '@nestjs/common';
  2. import { UserService } from './user.service';
  3. import { UserController } from './user.controller';
  4. import { Logger } from 'src/middleware';
  5. @Module({
  6. controllers: [UserController],
  7. providers: [UserService],
  8. exports:[UserService]
  9. })
  10. export class UserModule implements NestModule{
  11. configure (consumer:MiddlewareConsumer) {
  12. consumer.apply(Logger).forRoutes(UserController)
  13. }
  14. }

2.全局中间件

注意全局中间件只能使用函数模式 案例可以做白名单拦截之类的

  1. import { NestFactory } from '@nestjs/core';
  2. import { AppModule } from './app.module';
  3. const whiteList = ['/list']
  4. function middleWareAll (req,res,next) {
  5. console.log(req.originalUrl,'我收全局的')
  6. if(whiteList.includes(req.originalUrl)){
  7. next()
  8. }else{
  9. res.send('小黑子露出鸡脚了吧')
  10. }
  11. }
  12. async function bootstrap() {
  13. const app = await NestFactory.create(AppModule);
  14. app.use(middleWareAll)
  15. await app.listen(3000);
  16. }
  17. bootstrap();

3.接入第三方中间件 例如 cors 处理跨域

npm install cors

npm install @types/cors -D

  1. import { NestFactory } from '@nestjs/core';
  2. import { AppModule } from './app.module';
  3. import * as cors from 'cors'
  4. const whiteList = ['/list']
  5. function middleWareAll (req,res,next) {
  6. console.log(req.originalUrl,'我收全局的')
  7. if(whiteList.includes(req.originalUrl)){
  8. next()
  9. }else{
  10. res.send({code:200})
  11. }
  12. }
  13. async function bootstrap() {
  14. const app = await NestFactory.create(AppModule);
  15. app.use(cors())
  16. app.use(middleWareAll)
  17. await app.listen(3000);
  18. }
  19. bootstrap();

 

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发