在发送之前过滤响应

时间:2012-08-12 17:42:17

标签: node.js mongodb filtering mongoose

我正在使用mongoose在Node.js和MongoDB中编写服务器。

我有一个如下所示的用户模型:

var User = new Schema({
  username : {
    'type'      : String,
    'trim'      : true,
    'required'  : true,
    'validate': [usernameValidator, 'whitespace_not_allowed']
  },
  avatar : {
    'type'      : String,
    'lowercase' : true,
    'required'  : true
  },
  facebook_id : {
    'type'      : Number,
    'required'  : true,
    'index'     : { unique: true }
  },
  email : {
    'type'      : String,
    'lowercase' : true,
    'required'  : true
  },
  token : {
    'type'      : String,
    'index'     : { unique: true },
    'required'  : true
  }
});

当客户请求他所有的Facebook朋友时,我不想向他发送用户令牌,几乎每个请求都是如此。但对于某些请求,例如登录,我想发送令牌。

问题在于,在查询数据库时忘记过滤结果并发送令牌等其他信息可能非常致命。

我现在想到的解决方案是覆盖一个方法(不知道哪个),我指定默认选择哪些字段。然后在我需要更多的少数情况下,我必须在查询中指定它。这将确保内存单不会导致错误的数据被发送出去。

你如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

默认情况下,您可以通过架构中字段定义的select属性排除结果中的token字段:

token : {
  'type'      : String,
  'index'     : { unique: true },
  'required'  : true,
  'select'    : false
}