首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从控制器JSON返回的实体字段中排除。NestJS + Typeorm

如何从控制器JSON返回的实体字段中排除。NestJS + Typeorm
EN

Stack Overflow用户
提问于 2018-05-15 22:40:14
回答 11查看 65.4K关注 0票数 37

我希望从返回的JSON中排除密码字段。我正在使用NestJS和Typeorm。

这个问题上提供的解决方案不适合我,也不适用于NestJS。如果需要的话,我可以发布我的代码。还有其他的想法或解决方案吗?谢谢。

EN

Stack Overflow用户

发布于 2021-05-15 14:55:26

这已经是一个古老的话题了,但我还是想分享我的解决方案,也许它会对某人有所帮助。我使用Express,但我的示例可能也适用于这种情况。

因此,在实体类中,您只需定义一个附加的静态removePassword()方法,该方法接收实体本身的一个实例,然后发送由该方法创建的对象,而不是从DB获得的原始实体对象:

代码语言:javascript
复制
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity({ name: 'users' })
export class User {
  @PrimaryGeneratedColumn('uuid')
  id: string | undefined;

  @Column({ type: 'varchar', length: 100, unique: true })
  email: string | undefined;

  @Column({ type: 'text' })
  password: string | undefined;

  static removePassword(userObj: User) {
    return Object.fromEntries(
      Object.entries(userObj).filter(([key, val]) => key !== 'password')
    );
  }
}

这基本上就像调用数组上的filter()方法一样,但稍微复杂一点:您可以从条目数组中创建一个新对象(最终将发送的对象),该对象是通过过滤原始条目数组中的密码条目(使用这种精确的filter()方法)生成的。

不过,在您的路由处理程序中,您总是会这样做:

代码语言:javascript
复制
import { Router, Request, Response, NextFunction } from 'express';
import { User } from '../../entity/User';
import { getRepository } from 'typeorm';

const router = Router();

router.post(
  '/api/users/signin',
  (req: Request, res: Response, next: NextFunction) => {
    const { email } = req.body;

    getRepository(User)
      .findOne({ email })
      .then(user =>
        user ? res.send(User.removePassword(user)) : res.send('No such user:(')
      )
      .catch(err => next(new Error(err.message)));
  }
);

export { router as signinRouter };

您还可以使用常规方法:

代码语言:javascript
复制
withoutPassword() {
  return Object.fromEntries(
    Object.entries(this).filter(([key, val]) => key !== 'password')
  );
}

在你的路线处理程序中:

代码语言:javascript
复制
res.send(user.withoutPassword());
票数 1
EN
查看全部 11 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50360101

复制
相关文章

相似问题

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