【NestJS】跨域、全局异常处理、限速

跨域

  const app = await NestFactory.create(AppModule)

  const origins = JSON.parse(process.env.LSC_CORS_ORIGIN)
  //["http://localhost:8080","http://localhost:8081"]

  app.enableCors({

    "origin": origins,
    // "origin": "*",

    "credentials": true,

    // "allowedHeaders":['Authorization','content-type'],
    
    "methods": "GET,HEAD,PUT,PATCH,POST,DELETE",

    "preflightContinue": false,

    "optionsSuccessStatus": 204

  })//https://github.com/expressjs/cors#configuration-options

全局异常处理

可以捕获全局异常并且进行日志等相关记录

//HttpException 类型

import { ExceptionFilter, Catch, ArgumentsHost, HttpException,HttpStatus } from '@nestjs/common';
import { Request, Response } from 'express';

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse();
    const request = ctx.getRequest();
    const status = exception.getStatus();
		// @TODO 记录日志
    console.log('全局 HttpException 异常日志: %s %s error: %s', request.method, request.url, exception.message);
    // 发送响应
    response
      .status(status)
      .json({
        statusCode: status,
      	message: exception.message,
        timestamp: new Date().getTime(),
        path: request.url,
      });
  }
}
//不分异常类型


import {
    ExceptionFilter,
    Catch,
    ArgumentsHost,
    HttpException,
    HttpStatus,
} from '@nestjs/common'

@Catch()
export class AllExceptionsFilter implements ExceptionFilter {
    catch(exception: unknown, host: ArgumentsHost) {
        const ctx = host.switchToHttp()
        const response = ctx.getResponse()
        const request = ctx.getRequest()

        const status =
            exception instanceof HttpException
                ? exception.getStatus()
                : HttpStatus.INTERNAL_SERVER_ERROR

        const exceptionStr = exception ? `message:${exception['message']},stack:${exception['stack']}` : ''

        console.log('全局异常日志: %s %s %s error: %s', request.method, request.url, request.body, exceptionStr)

        response.status(status).json({
            statusCode: status,
            timestamp: new Date().getTime(),
            message: exception['message'],
            method: request.method,
            path: request.url,
        })
    }
}
//设置为全局异常

app.useGlobalFilters(new HttpExceptionFilter(),new AllExceptionsFilter())

//https://docs.nestjs.cn/7/exceptionfilters

限速

保护node程序免受暴力攻击

$ npm i --save express-rate-limit


  app.use(
    rateLimit({
      windowMs: 15 * 60 * 1000, // 15分钟
      max: 1000, // 限制15分钟内最多只能访问1000次
    }),
  )

你可能感兴趣的:(NestJS,TypeScript,javascript,nodejs,nestjs,typescript)