1. 开启配置版本号
import { VersioningType, Post, Get, Version } from '@nestjs/common'
app.enableVersioning({
type: VersioningType.URI
})
@Controller({
path: 'user',
version: '1',
})
export class UserControlelr {
}
@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'))
upload(@UploadFile() file) {
console.log('file:', file)
return {
code: 200,
msg: 'ok'
}
}
}
4. 配置静态资源访问目录
import { NestFactory } from '@nestjs/core'
import { AppModule } from './app.module'
import { NestExpressApplication } from '@nestjs/platform-express'
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 {
@Get('export')
download(@Res res: Response) {
const url = join(__dirname, '../images/filename.png')
res.download(url)
}
@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端请求
function download() {
window.open('http://localhost:3000/upload/export')
}
async function download() {
const res = await axios.get('http://localhost:3000/upload/stream', {
responseType: 'blob',
})
const blob = new Blob([res.data])
cosnt url = URL.createObjectURL(blob)
const a = document.createElement('a')
a.href = url
a.download = 'filename.zip'
a.click()
}