When I create a controller in sails.js with some standard method redefined, how do I call default parent method of this controller?
module.exports = {
create: function(req, res) {
//test some parameters
if (condition) {
//call regular super method, proceed as usual
//_super(); <- how to do this?
} else {
//do some other things
}
}
};
When I create a controller in sails.js with some standard method redefined, how do I call default parent method of this controller?
module.exports = {
create: function(req, res) {
//test some parameters
if (condition) {
//call regular super method, proceed as usual
//_super(); <- how to do this?
} else {
//do some other things
}
}
};
Share
Improve this question
asked Aug 7, 2013 at 17:49
alevkonalevkon
3274 silver badges13 bronze badges
3
-
1
Where would this default parent method exist? Doesn't seem like you're overriding anything here, just defining a
create
controller route. – voithos Commented Aug 7, 2013 at 18:00 - Sails.js provide its own implementation for create method in controllers. If we don't define it, it works as usual – just builds the model and saves it into the DB. The question is how to call this default implementation. – alevkon Commented Aug 7, 2013 at 18:08
- Like Mike said, you can try calling next() (the third argument to your controller action). It doesn't work for me (v0.9.3), but for newer versions it can work. My solution is duplicating default behaviour. Since it's just couple of lines, it doesn't make a big problem. – alevkon Commented Apr 19, 2014 at 4:34
1 Answer
Reset to default 8Update: for Sails >= v0.10.x, see the ment below from @naor-biton
If you want to access the default implementation (the blueprint), as of v0.9.3, you can call next()
(the third argument to your controller). This is because Sails is based on the Express/Connect concept of middleware, allowing you to chain things together.
Please note that this behavior may change in a subsequent version, since next()
is also how you call your default 404 handler (config/404.js
) for actions which don't have a blueprint underneath them.
A better approach, if you're interested in using the blueprints but running a bit of logic beforehand, is to leave the controller action undefined and use one or more policies, which will be run beforehand.