返回对象json给客户端如何优雅地去除多余/添加额外字段?
发布于 6 年前 作者 ooyeah 3626 次浏览 来自 问答

举个栗子,写一个用户登录接口。

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 回复

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, [])

回到顶部