如何在sequelize中创建用户后只返回我需要的字段?



所以我使用sequelize create函数在postgres中存储一个用户,使用try/catch块,如下所示:

try {
const user = await User.create({
name : name,
email : email,
hash : passHashed
}, {
returning: ["id", "name"]
})
console.log(user)
res.json(user)
} catch (error) {
console.log("error here", error)
res.status(409).json(error)
}

但是,即使在create方法的第二个参数中指定了我想要的字段,所有内容都返回

我已经尝试只返回名称,因为似乎总是会返回id,因为它是主键。

sequelize总是在操作完成时记录日志,这里它说它返回了我需要的东西:

[1] Executing (default): INSERT INTO "Users" ("id","name","email","hash","createdAt","updatedAt") VALUES (DEFAULT,$1,$2,$3,$4,$5) RETURNING "id","name";

用户总是被正确创建,但是

返回的用户(console.log)和对前端的响应(res.json)总是返回所有内容。

我怎么能返回作为响应只有我需要的字段,在这种情况下id和名称,而不是所有其他字段,如密码,createdAt,电子邮件等

您应该在DTO中使用class-transformer转换您的响应数据。使用@Exclude@Expose来确定要公开的属性。文档在这里

user.dto.ts

import { Exclude, Expose } from 'class-transformer';
@Exclude()
export class UserDto {
@Expose()
id: number;
@Expose()
name: string;
}

在你的函数中:user.service。将userModel转换为userDto

import { plainToInstance } from 'class-transformer';
try {
const user = await User.create({
name : name,
email : email,
hash : passHashed
}, {
returning: ["id", "name"]
})
return plainToInstance(UserDto, user);  // transform here
} catch (error) {
console.log("error here", error)
res.status(409).json(error)
}

相关内容

  • 没有找到相关文章

最新更新