Node.js 使用Sequelize.js标记或审查字段

Node.js 使用Sequelize.js标记或审查字段,node.js,sequelize.js,Node.js,Sequelize.js,在Sequelize模型中,是否有一种“标记”或“审查”属性集的好方法 我的意思是类似于支持的标记 例如,我的用户模式有一个密码字段。我不想从任何API调用中返回这个。我也不想在用户控制器中对其进行审查,因为在每个路由的基础上配置审查似乎是一种不好的做法 我希望能够像User.find({query},{tag:'public')我通常定义自己的助手方法来限制sequelize返回的数据 var User = connection.define( 'User', { email: Seque

在Sequelize模型中,是否有一种“标记”或“审查”属性集的好方法

我的意思是类似于支持的标记

例如,我的用户模式有一个密码字段。我不想从任何API调用中返回这个。我也不想在用户控制器中对其进行审查,因为在每个路由的基础上配置审查似乎是一种不好的做法


我希望能够像
User.find({query},{tag:'public')
我通常定义自己的助手方法来限制sequelize返回的数据

var User = connection.define( 'User', {
  email: Sequelize.VARCHAR( 255 ),
  password: Sequelize.VARCHAR( 255 ), //note: do NOT store plaintext passwords
}, {
  instanceMethods: {
    sanitize: function(){
      var data = this.get()
      delete data.password
      return data
     }
  },
  classMethods: {
    get: function( options ){
      return this.find( options ).then( function( record ){
        return record.sanitize()
      })
    },
    getAll: function( options ){
      return this.findAll( options ).then( function( records ){
        return records.map( function( record ){
          return record.sanitize()
        })
      })
    }
  }
})
如果希望一般限制对字段的简单访问,这也是可行的:

var User = connection.define( 'User', {
  email: Sequelize.VARCHAR( 255 ),
  password: {
    type: Sequelize.VARCHAR( 255 ), //note: do NOT store plaintext passwords
    get: function(){
      return null
    },
    set: function( value ){
      this.setDataValue( 'password', value )
    }
})
请注意,这两种方法都允许通过
user.getDataValue('password')
访问
password
字段

因此,在控制器中,不要使用类似以下内容:

app.get( '/admin-user', function( req, res ){
  User.find( 1 ).then( function( user ){
    res.json( user.get() )
  })
})
用这个

app.get( '/admin-user', function( req, res ){
  User.get( 1 ).then( function( user ){
    res.json( user )
  })
})
还是这个

app.get( '/admin-user', function( req, res ){
  User.find( 1 ).then( function( user ){
    res.json( user.sanitize() )
  })
})

这不会阻止你返回敏感数据,但让你的所有路线使用相同的卫生方法会有所帮助。

感谢你的指导。我希望有一个比包装sequelize find函数来删除敏感字段更优雅的通用解决方案。不过,你的评论确实有帮助。我可能不会请尝试编写一个mixin来包装所有返回sequelize模型实例的函数,并删除敏感字段,除非找到正确的标记。