nestjs - 01

本文详细介绍NestJS中配置版本控制、跨域、中间件、文件上传与下载等功能的具体实现方式,帮助开发者快速掌握NestJS的进阶用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 开启配置版本号

   import { VersioningType, Post, Get, Version } from '@nestjs/common'
   app.enableVersioning({
     // 版本号
     type: VersioningType.URI
   })
   
   // 1、路由整体配置
   @Controller({
     path: 'user', // 路由名称
     version: '1', // 版本号
   })
   export class UserControlelr {
   }
   // 2、子路由配置
   @Controller('user')
   export class UserController {
     @Get()
     @Version('1') // 版本号
     findAll() {
       return 'this is find all user'
     }
   }
   

2. 跨域配置

   import * as cors from 'cors'
   app.use(cors())
   

3. 全局中间价

   import Logger from './middleware'
   app.use(middleware)

4. 上传图片配置

1. 安装模块

      npm install multer -S
      npm install @types/multer -D

2. 配置UploadModule

      
      import { UploadController } from './upload.controller'
      import { MulterModule } from '@nestjs/platform-express'
      import { diskStorage } from 'multer'
      import { join, extname } from 'path'
      @Module({
        imports: [MulterModule.register({
          storage: diskStorage({
            destination: join(__dirname, '../images'),
            filename: (_, file, callback) => {
              const filename = `${new Date().getTime() + extname(file.originalname)}`
              return callback(null, filename)
            }
          })
        })],
        constrollers: [UploadController]
      })
      export class UploadModule {}

3. 配置UploadController

      import { useInterceptors, UploadedFile } from '@nestjs/common'
      import { 
        FileInterceptor, // 单文件
        FileFieldsInterceptor // 多文件
      } from '@nestjs/platform-express'
      
      @Controller('upload')
      export class UploadController {
        constructor() {}
        
        @Post('album')
        // 定义前端上传文件的参数名 
        @UseInterceptors(@FileInterceptor('file')) // 单个图片上传,file
        upload(@UploadFile() file) {
          console.log('file:', file)
          // 返回给客户端的信息
          return {
            code: 200,
            msg: 'ok'
          }
        }
      }

4. 配置静态资源访问目录

      import { NestFactory } from '@nestjs/core'
      import { AppModule } from './app.module'
      // 1、需要引入一个类型, 类型定义了一个 useStaticAssets 方法
      import { NestExpressApplication } from '@nestjs/platform-express'
      
      // 2、在app 上配置
      async function bootstrap() {
        const app = await NestFactory.create<NestExpressApplication>(AppModule)
        app.useStaticAssets(path.join(__dirname, 'images'), {
          prefix: '/dist',  // 自定义文件路径 
        })
      }

5. 下载静态资源

      import { Get, Res } from '@nestjs/common'
      import { Response } from 'express'
      import { join } from 'path'
      import { zip } from 'compressing'
      @Controler('upload')
      export class UploadControler {
        // 1、直接下载
        @Get('export')
        download(@Res res: Response) {
          const url = join(__dirname, '../images/filename.png')
          res.download(url)
        }
        
        // 2、文件流下载
        // 安装模块:npm i compressing
        @Get('stream')
        async down(@Res res: Response) {
          const url = join(__dirname, '../images/filename.png')
          const tarStream = new zip.Stream()
          await tarStream.addEntry(url)
          // 设置流响应头,固定写法
          res.setHeader('Content-Type', 'application/octet-stream')
          res.setHeader('Content-Disposition', 'attachment/* 可以加入自定义参数 eg: ;fliename=chao;custom=li; */')
          
          // 返回给前端
          tarStream.pipe(res)
        }
      }
web端请求
      // 1、直接下载
      function download() {
        window.open('http://localhost:3000/upload/export')
      }
      
      // 2、以流的方式下载(安全,可以处理、加密等)
      async function download() {
        // 1、axios请求
        const res = await axios.get('http://localhost:3000/upload/stream', {
          responseType: 'blob', // 流文件必须得配置
        })
        const blob = new Blob([res.data])
        // 2、fetch请求
        // const res = await fetch(url).then(res => res.arrayBuffer())
        // const blob = new Blob([res])
        
        cosnt url = URL.createObjectURL(blob)
        const a = document.createElement('a')
        a.href = url
        a.download = 'filename.zip'
        a.click()
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值