所以我使用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)
}