Javascript SailsJS:在创建前或创建后访问res.render

Javascript SailsJS:在创建前或创建后访问res.render,javascript,node.js,sails.js,Javascript,Node.js,Sails.js,我需要在创建之前访问中的res.render函数,以便呈现html模板,但似乎res对象未传递给该函数。你知道我该怎么做吗 据我所知,这里是afterCreate得到的: afterCreate: function(attrs, next) { // attrs is basically just the model next(); } 模型是应用程序的数据层,它与请求响应和视图呈现无关。 beforeCreate和afterCreate是模型生命周期回调,用于在数据更改时执行

我需要在创建之前访问
中的
res.render
函数,以便呈现
html
模板,但似乎
res对象未传递给该函数。你知道我该怎么做吗

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

afterCreate: function(attrs, next) {
    // attrs is basically just the model
    next();
}
模型是应用程序的数据层,它与请求响应和视图呈现无关。
beforeCreate
afterCreate
是模型生命周期回调,用于在数据更改时执行一些逻辑。 实际上,您可以从不同的位置创建/更改/删除模型数据:sails控制台、控制器、服务等,这些回调将被调用

考虑这种情况:如果在控制器中调用model.create()方法100次,那么
beforeCreate
afterCreate
将分别调用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();
  }
});

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

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

我不想呈现一个响应,只要发送一封电子邮件,我需要呈现HTML模板。此外,我没有使用控制器在模型中创建新条目。这一切都是由SailsJS通过CRUD自动完成的,因此据我所知,没有其他地方可以连接我的回拨以发送电子邮件。这是推荐的方式吗?我认为当前Sails的文档中不包括这项任务,所以这可能不是您所说的“推荐”的意思。但Sails仍处于开发的早期阶段,有很多主观因素,这是正常的。不幸的是,这种方法存在一些问题。首先,它将无法访问驻留在
res
中的函数(最著名的本地化函数,如
\uuu
)。其次,
sails.express
在v0.10中不可用(应该是
sails.hooks.http.app
)。目前唯一真正安全的方法是a)使用自定义控制器操作来创建模型,而不是blueprint CRUD,或者b)直接在
afterCreate
方法中使用模板渲染模块(例如
ejs
)。尽管如此,这无疑为Sails中的全局可访问渲染方法提供了理由……顺便说一句,您可以访问beforeCreate方法中的req和res对象吗?@PetarVasilev Nope,这是最初的问题。