我需要访问res.render
中的beforeCreate
功能才能呈现html
模板,但似乎res object
未传递给该功能。任何想法我该怎么做?
据我所知,这是afterCreate得到的:
afterCreate: function(attrs, next) {
// attrs is basically just the model
next();
}
答案 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)
模型是应用程序的 数据 层,它与请求响应和视图呈现无关。
beforeCreate
和afterCreate
是模型生命周期回调,用于在数据更改时执行某些逻辑。
实际上,您可以从不同的地方创建/更改/删除模型数据:风帆控制台,控制器,服务等,并将调用这些回调。
考虑这样的情况:如果在你的控制器中你调用YourModel.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();
}
});