CNode

返回对象json给客户端如何优雅地去除多余/添加额外字段?

问答
Oooyeah发布于9 年前最后回复9 年前4 回复4519 浏览0 收藏

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

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)

L
leemove#1·9 年前

delete

G
godghdai#2·9 年前

_.pluck

R
rrbe#3·9 年前

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 就好了

A
axetroy#4·9 年前

可以在服务端定义接口的返回类型。

然后调用_.pick(obj, [])

参与回复
登录后即可参与回复。登录