Javascript 在控制器nestjs中注入一个简单类
所以基本上我有一个控制器,它使用了一个decorator'UseInterceptor',因为我传递了一个调用方法的类,但是我觉得我没有按照应该的方式做。我需要有人能帮助我定义一种更好的方法来维护控制器类的奇异性 icons.controller.tsJavascript 在控制器nestjs中注入一个简单类,javascript,node.js,dependency-injection,nestjs,interceptor,Javascript,Node.js,Dependency Injection,Nestjs,Interceptor,所以基本上我有一个控制器,它使用了一个decorator'UseInterceptor',因为我传递了一个调用方法的类,但是我觉得我没有按照应该的方式做。我需要有人能帮助我定义一种更好的方法来维护控制器类的奇异性 icons.controller.ts var uploadOptions = new InterceptorClass(); ----> This bugs me and ---doesn't feel right way of doing. const filesize =
var uploadOptions = new InterceptorClass(); ----> This bugs me and ---doesn't feel right way of doing.
const filesize = 512 * 512;
const driverFilesize = 512 * 512;
@Controller('icons')
export class IconsController {
constructor(
private iconsService: IconsService) { }
@Post('/marker/')
@UseGuards(CustomAccessGuard)
@UseRoles({
resource: ModuleNames.ICONS,
action: "create",
possession: "own"
})
@UseInterceptors(uploadOptions.uploadInterceptor(filesize)) ----> This is where I am using it.
async uploadMarkerFile(
@UploadedFile() file,
@GetUser() user,
@FileValidator() validator
) {
let result = await this.iconsService.uploadFile(file, IconEntityType.MARKER, user);
return new SuccessResponse(true, "Successfully Uploaded", result);
}
}
file.service.ts
供参考
import { FileInterceptor } from "@nestjs/platform-express"
import { memoryStorage } from 'multer';
import { editFileName, imageFileFilter } from "../icons/utils/file-upload.utils";
export class InterceptorClass {
constructor() { }
uploadInterceptor(fileSize: number) {
const UploadInterceptor = FileInterceptor('file', {
storage: memoryStorage({
// destination: './src/assets/marker/icons',
filename: editFileName
}),
fileFilter: imageFileFilter,
limits: {
files: 1,
fileSize: fileSize
}
});
return UploadInterceptor;
}
}
您只需将
FileInterceptor
decorator包装在您自己的decorator中,然后使用给定的配置对其进行初始化:
// in file custom-file.interceptor.ts
import { editFileName, imageFileFilter } from "../icons/utils/file-upload.utils";
export function CustomFileInterceptor(fileSize) {
const UploadInterceptor = FileInterceptor('file', {
storage: memoryStorage({
// destination: './src/assets/marker/icons',
filename: editFileName
}),
fileFilter: imageFileFilter,
limits: {
files: 1,
fileSize
}
});
return UploadInterceptor;
}
然后您可以这样使用它:
import {CustomFileInterceptor} from "./custom-file.interceptor";
...
@UseInterceptors(CustomFileInterceptor(512))
async uploadMarkerFile(...)
@哈里姆·雷汉:有什么反馈吗?