我是nodejs
和express
的新手。
我正在尝试使用ts-express-decorators
创建一个休息服务。
在我的controller
中,我有一个POST
方法可以更新用户数据并返回更新的结果。
但是我要更新的集合中有几个字段我不想发送给用户。
我的controller.ts
import { Controller, Get, PathParams, Authenticated, Required, Req, Post, Res, BodyParams } from 'ts-express-decorators';
import { Returns } from 'ts-express-decorators/lib/swagger';
@Controller('/users')
@Authenticated()
export class UserController {
constructor(private userService: UserService) { }
@Post('/update')
@Returns(UserResponse)
async updateUser(
@Req() req,
@Res() res) {
const data = await this.userService.updateUser(req.body)
return data;
}
}
这是user.ts
export class UserResponse {
@JsonProperty()
email: string;
@JsonProperty()
firstName: string;
@JsonProperty()
lastName: string;
@JsonProperty()
picture?: string;
@JsonProperty()
_id: string;
}
我想像UserResponse
类中那样构造响应。但是目前,它从集合中返回的json将会存储所有数据。
service.ts
async updateUser(data) {
return await this.userRepository.findByIdAndUpdate({_id: data.id}, data);
}
样板中的默认方法遵循相同的结构。
请指出我所缺少的或者有更好的选择来实现这一目标。
我能够在controller.ts
中重组响应json,但我不想这样做。
我当前的回复:
{
"_id": "5b6aee50f31f19156c014933",
"email": "test@gmail.com",
"password": "ZAUzmguxklW7769Uc0CrUi",
"firstName": "Test",
"lastName": "Test",
"__v": 0,
"picture": "",
"tokens": []
}
预期的响应:
{
"_id": "5b6aee50f31f19156c014933",
"email": "test@gmail.com",
"firstName": "Test",
"lastName": "Test",
"picture": ""
}
答案 0 :(得分:1)
现在,当您的代码被转换为JavaScript时,它将简单地返回await this.userService.updateUser(req.body)
的结果。
您将需要根据UserResponse
变量创建data
的新实例。明确设置您要在UserResponse
实例中设置的所有字段。然后,您必须返回该UserResponse
实例而不是data
变量。
示例:
const response = new UserResponse();
response._id = data._id;
response.email = data.email;
response.firstName = data.firstName;
response.lastName = data.lastName;
return response;
我可能会为UserResponse
创建一个新的构造函数,该构造函数需要必需的参数。