在afterCreate上调用控制器

时间:2014-01-10 10:53:46

标签: sails.js

我的Sessions模型的代码如下:

module.exports = {

  attributes: {

  },
  afterCreate: function(value,next) {
    next();
  }

};

以下Sessions控制器:

module.exports = {

  saveSession: function(res,req) {
    console.log('in save');
  }
};

我想将值保存到用户的会话afterCreate

如何从我的模型中调用saveSession函数?我试过Sessions.saveSession(),但它不起作用。

2 个答案:

答案 0 :(得分:1)

我认为您不需要会话模型,直接调用控制器方法不是一个好主意。

我建议您在尝试保存会话时设置req.session,并在响应该控制器操作时自动保存。

afterCreate永远无法访问req,除非您将其传递给我,我不建议这样做。

模式类似于:

{
  // …
  login: function (req,res) {
  User.findOne({
    username: req.param('username'),
    password: req.param('password')
  }).exec(function (err, user) {
    if (err) return res.serverError(err);
    if (!user) return res.view('/login');
    req.session.user = user.toJSON();
    return res.redirect('/dashboard');
  });
}
  // ...

答案 1 :(得分:0)

我认为您希望将值保存到Cookie 创建另一个数据库记录我是否正确?

如果是这样,你不需要从模型调用控制器动作(不推荐),你只需要创建一个新记录或将值保存到cookie,这里有一些我认为在你的场景中可能的选择。

创建另一条记录:

    // on models/YourModel
    module.exports = {

      attributes: {

      },
      afterCreate: function(newlyInsertedRecord,next) {
          ModelOrResource.create({
              param1: newlyInsertedRecord.attributeYouWant,
              param2: value2
              // and so on
          }).exec(function(err, recordCreated){
              if(err) return next(err);
              // do somethign with recordCreated if you need to
              // ...
              next();
          })

      }

    };

将值保存到Cookie:

    module.exports = {

        attributes: {

        },
        afterCreate: function(newlyInsertedRecord, next) {
            // do some other stuff not related to calling a controller action ;)
            next();
        }

    };

这段代码是从我自己项目的片段中重新编写的,所以它应该适用于帆.9.x

希望它有所帮助!