Yag*_*ago 10 node.js typescript nestjs
我想修剪所有正文值(输入字段开头/结尾处的空白空格)。我不想为每个 API 请求循环所有主体元素来清理字段。
我想知道是否可以覆盖 @body() 注释,并将代码放在那里,或者是否有一个输入格式化程序或管道可以做到这一点。
目前,我正在这样做:
createAccount(@Body() body: any) {
this.account.create(body.map(s => s.trim()))
}
Run Code Online (Sandbox Code Playgroud)
谢谢
Yag*_*ago 16
谢谢 Uro\xc5\xa1 An\xc4\x91eli\xc4\x87 的建议。我创建了一个 PipeTransform 来处理这个问题:
\nimport { Injectable, PipeTransform, \nArgumentMetadata, BadRequestException } from '@nestjs/common'\n\n@Injectable()\nexport class TrimPipe implements PipeTransform {\n private isObj(obj: any): boolean {\n return typeof obj === 'object' && obj !== null\n }\n\n private trim(values) {\n Object.keys(values).forEach(key => {\n if (key !== 'password') {\n if (this.isObj(values[key])) {\n values[key] = this.trim(values[key])\n } else {\n if (typeof values[key] === 'string') {\n values[key] = values[key].trim()\n }\n }\n }\n })\n return values\n }\n\n transform(values: any, metadata: ArgumentMetadata) {\n const { type } = metadata\n if (this.isObj(values) && type === 'body') {\n return this.trim(values)\n }\n\n throw new BadRequestException('Validation failed')\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n这是如何使用它
\n @UsePipes(new TrimPipe())\n createAccount(@Body() body: any) {\n this.account.create(body)\n }\n
Run Code Online (Sandbox Code Playgroud)\n您还可以将其设置为全局管道:
\napp.useGlobalPipes(new TrimPipe());\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
8675 次 |
最近记录: |