返回对象json给客户端如何优雅地去除多余/添加额外字段?
举个栗子,写一个用户登录接口。
var UserSchema = new mongoose.Schema({
phone: { type: String, trim: true }, // 手机号码
email: { type: String, trim: true }, // 邮箱
*:{}, //此处省略n个字段
passwrod: { type: String, trim: true }, // 密码
}
//登录返回用户对象
User.find(_, function(err, user){
res.json(user)
})
问题一: 只想返回某部分字段,不想返回password等多个字段,应该怎样优雅地处理?
只能在查询的时候指定字段查询吗? (字段多的时候岂不是要跪?)
User.find(_,'phone, email' function(err, user){
res.json(user)
})
4 回复
delete
_.pluck
1.mongoose 提供的 find / findOne / findOneAndUpdate 等多种 find 方法中都可以在 options 参数中指定返回的字段,比如
User.findOne({
conditions: conditions,
}, {
password: 0,
other_info: 0, // 0 表示不返回,1 表示返回
});
2.也可以写插件定义 toJSON / toObject 等方法,在返回文档的时候 delete 掉这些字段
schema.set('toJSON', {
transform(doc, ret) {
delete ret.password;
return ret;
},
});
3.直接在 controller 里返回字段的时候 delete user.password 就好了
可以在服务端定义接口的返回类型。
然后调用_.pick(obj, [])