如何将模型方法添加到用户会话?

时间:2015-03-21 16:01:36

标签: node.js session sails.js models

我有一个User模型,我在 Sails.js 中使用 Passport.js 。通过此设置,req.user返回当前用户会话详细信息,如req.user.username返回“Jimmy”,用于Jimmy的会话。

我觉得这非常方便用于布局,我还想添加一个查找用户设置的方法,可以通过req.user访问。

我的方法(在User模型中),截至目前,看起来像这样:

  getSetting: function(code) {

        UserSettings.find({ where: { user: req.user.id, code: code } }).exec(function(err, setting) {
            return setting.value;
        });

  }

如何通过req.user访问此方法,以便在我req.user.getSetting('TEST_CODE');时获得该用户所需的设置值?

或者,我怎样才能轻松访问用户的设置?我有UserSettings模型与User模型相关联。

编辑:

我拥有的用户模型:

var User = {

  schema: true,

  attributes: {
    username  : { type: 'string', unique: true },
    email     : { type: 'email',  unique: true },
    passports : { collection: 'Passport', via: 'user' },
    settings  : { collection: 'UserSettings', via: 'user' }
  },

  getSetting: function(code) {

        UserSettings.find({ where: { user: req.user.id, code: code } }).exec(function(err, setting) {
            return setting.value;
        });

  }

};

module.exports = User;

感谢。

1 个答案:

答案 0 :(得分:1)

好的,我查看了Sail.js documentation,结果发现他们使用另一种方法来创建模型,所以我正在重写我的答案。

你想要的是attribute method,所以你需要在attributes键中定义你的功能:

var User = {

  schema: true,

  attributes: {
    username  : { type: 'string', unique: true },
    email     : { type: 'email',  unique: true },
    passports : { collection: 'Passport', via: 'user' },
    settings  : { collection: 'UserSettings', via: 'user' },

    getSetting: function(code, cb) {

          UserSettings.find({ where: { user: this.id, code: code } }).exec(function(err, setting) {
              cb(setting.value);
          });

    }
  }

};

module.exports = User;

但是无法直接返回值的问题仍然存在,您需要将其作为参数传递给回调函数。