首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么类验证器装饰器在与类转换器一起使用时会删除属性?

为什么类验证器装饰器在与类转换器一起使用时会删除属性?
EN

Stack Overflow用户
提问于 2022-03-21 08:50:47
回答 1查看 931关注 0票数 0

我试图使用类验证器和类转换器对Next.js API路由中的API请求执行验证。

我已经把这个基本的API处理程序放在一起来演示:

代码语言:javascript
复制
import { plainToInstance } from 'class-transformer';
import { IsString } from 'class-validator';
import { NextApiRequest, NextApiResponse } from 'next';

class PostBody {
  @IsString()
  public title!: string;

  public content!: string;
}

const validateRequest = (req: NextApiRequest) => {
  const request = plainToInstance(PostBody, req.body);

  console.log(request);
};

const Handler = (req: NextApiRequest, res: NextApiResponse) => {
  validateRequest(req);
  res.status(200).json({ message: 'ok' });
};

export default Handler;

如果我用带身体的邮递员发送请求:

代码语言:javascript
复制
{ "title": "Test", "content": "Hello world" }

这将被记录到控制台:PostBody { content: 'Hello world' }

如果我删除了@IsString()装饰器,它将被记录为:PostBody { title: 'Test', content: 'Hello world' }

有人知道为什么类验证器装饰器似乎要删除属性吗?

使用:

代码语言:javascript
复制
"next": "^12.1.0",
"class-transformer": "^0.5.1",
"class-validator": "^0.13.2",
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-29 10:37:17

问题可能是您的babel配置不正确。

尝试将其放入您的babel.config.js (如果您还没有该文件,请创建该文件):

代码语言:javascript
复制
module.exports = {
  presets: ['next/babel'],
  plugins: [['@babel/plugin-proposal-decorators', { 'legacy': true }]],
};

另外,不要忘记将这两个devDependencies放入您的package.json

代码语言:javascript
复制
"@babel/core": "^7.12.9",
"@babel/plugin-proposal-decorators": "^7.17.8",

将这两行输入到tsconfig.json

代码语言:javascript
复制
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71554886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档