SailsJS:访问beforeCreate或afterCreate中的res.render

时间:2014-01-25 17:17:12

标签: javascript node.js sails.js

我需要访问res.render中的beforeCreate功能才能呈现html模板,但似乎res object未传递给该功能。任何想法我该怎么做?

据我所知,这是afterCreate得到的:

afterCreate: function(attrs, next) {
    // attrs is basically just the model
    next();
}

2 个答案:

答案 0 :(得分:2)

您可以使用位于sails.express.app.render的global Express'渲染器,因此在您的模型中它可以是这样的:

module.exports = {
  beforeCreate: function(values, next) {
    sails.express.app.render('home', {locals: {}}, function(err, html) {
      console.log(html);
      next();
    });
  }
};

答案 1 :(得分:1)

模型是应用程序的 数据 ,它与请求响应和视图呈现无关。 beforeCreateafterCreate是模型生命周期回调,用于在数据更改时执行某些逻辑。 实际上,您可以从不同的地方创建/更改/删除模型数据:风帆控制台,控制器,服务等,并将调用这些回调。

考虑这样的情况:如果在你的控制器中你调用YourModel.create()方法100次,那么beforeCreateafterCreate将被调用100次。所以无论如何,在这些回调中呈现响应并不是一个好主意。

您应该在控制器中管理请求处理和响应呈现,而不是这样。 如果您想在创建一些数据后做出响应,那很简单:

YourModel.create({
  somefield: 'Nick',
  onemore: 'some string'
}).done(function(err, data) {

  // Error handling
  if (err) {
    return console.log(err);

  // our model resord was created successfully!
  }else {
    console.log("model created:", data);

    // if you have nothing else to do here, let's render the view
    res.view();
  }
});