覆盖 nestjs/crud 响应
Posted
技术标签:
【中文标题】覆盖 nestjs/crud 响应【英文标题】:Override nestjs/crud response 【发布时间】:2021-12-28 14:54:15 【问题描述】:我在这个项目中使用了 nest 和 nestjs/crud 库。不幸的是,我无法覆盖 createOneBase 函数,以便它返回人员响应 我在同一主题的最后几篇文章中寻找解决方案。 我想在创建用户时更改答案。
我有什么:
"id": 12,
"username": "test",
"password": "tests",
"email": "test@foo.bar"
我的期望:
"id": 12,
"username": "test",
"password": "tests",
"email": "test@foo.bar",
"token": "TOKEN"
我的控制器:
import Controller from '@nestjs/common';
import UsersService from './users.service';
import Crud, Override, ParsedRequest, ParsedBody, CrudRequest, CrudController from '@nestjsx/crud';
import User, UserDTO from './user';
@Crud(
model:
type: User,
,
)
@Controller('users')
export class UsersController
constructor(public service: UsersService)
get base(): CrudController<User | UserDTO>
return this;
@Override()
createOne(
@ParsedRequest() req: CrudRequest,
@ParsedBody() dto: User,
): Promise<User | UserDTO>
const userDto: UserDTO =
id: dto.id,
username: dto.username,
password: dto.password,
email: dto.email,
token: 'TOKEN',
;
return this.base.createOneBase(req, userDto);
我的实体:
import IsDefined, IsString, MinLength from 'class-validator';
import Entity, PrimaryGeneratedColumn, Column from 'typeorm';
@Entity()
export class User
@PrimaryGeneratedColumn()
id: number;
@Column()
@IsDefined( always: true )
@IsString( always: true )
@MinLength(1, always: true )
username: string;
@Column()
@IsDefined( always: true )
@IsString( always: true )
@MinLength(5, always: true )
password: string;
@Column()
@IsDefined( always: true )
@IsString( always: true )
@MinLength(1, always: true )
email: string;
export class UserDTO
id: number;
username: string;
password: string;
email: string;
token: string;
access_token?: string;
所以我不明白它有什么问题,谢谢你的帮助
【问题讨论】:
【参考方案1】:要覆盖 Nestjs/Crud 方法,请使用装饰器 @Override(functionName)
Nestjs/Crud Doc
@Override('createOneBase')
createOne(
@ParsedRequest() req: CrudRequest,
@ParsedBody() dto: Hero)
return this.base.createOneBase(req, dto);
【讨论】:
你好,谢谢你的帮助,但它没有回答我的问题,因为我已经使用了这个功能,另一方面我感兴趣的是能够修改 createOnBase 的答案 好的,3个解决方案,首先,创建一个方法来获取您的令牌或其他数据并在控制器返回之前添加它,第二个覆盖您的服务和方法createOneBase
,第三个使用nestJs拦截器跨度>
以上是关于覆盖 nestjs/crud 响应的主要内容,如果未能解决你的问题,请参考以下文章