nest中间件
> middleware
import {Injectable,NestMiddleware} from '@nestjs/common'
Injectable()
export class Logger implements NestMiddleware{
use(req:Request,res:Response,next:NextFunction){
console.log('我进来了哦!');
//next()
res.send('┗|`O′|┛ 嗷~~')
}
}
> user.modoule
import { Logger } from 'src/middleware/middleware';
@Module({
controllers: [UserController],
providers: [UserService],
exports:[UserService]
})
export class UserModule implements NestModule {
configure(consumer: MiddlewareConsumer){
consumer.apply(Logger).forRoutes({path:'user',method:RequestMethod.GET})
}
}
下面的写法为全局中间件,一般用于设置白名单
在main.js内操作
// 导入NestJS核心工厂类,用于创建应用实例
import { NestFactory } from '@nestjs/core';
import { VersioningType } from '@nestjs/common';
// 导入根模块,整个应用的入口模块
import { AppModule } from './app.module';
import {Request,Response,NextFunction} from "express"
import cors from 'cors'
const whiteList=["/user"]
function middleware(req:Request,res:Response,next:NextFunction){
console.log(req.originalUrl,'req');
if(whiteList.includes(req.originalUrl)){
next()
}else{
res.send('小黑子,不许进')
}
}
/**
* 应用程序启动函数 - 程序的入口点
* 就像按下电脑的开机按钮,启动整个NestJS应用
*/
async function bootstrap() {
// 使用NestFactory创建应用实例,传入根模块AppModule
const app = await NestFactory.create(AppModule);
//这里进行的是版本控制,通过URL控制
app.enableVersioning({
type:VersioningType.URI
})
app.use(cors()) 👈👈👈👈👈👈 //我们也可以使用cors来解决跨越问题
app.use(middleware)
await app.listen(process.env.PORT ?? 3000);
console.log('应用已启动,访问地址: http://localhost:3000');
}
bootstrap();