SailsJS provides default blueprint actions, such as find, update, create, etc.
I need to override some of them to suit particular business purposes. However, I would lik
I just came across the same issue and found a different way to fix it. It may help in the future if someone has the same problem. What I finally did was to re-write the action in the controller, in my case it was add and then, after doing some stuff inside, called the default blueprint's action.
So, my code looks like below:
add: function (req, res) {
if (xxx) {
// I need to do something only when the condition above is met
Section.count({xxx: xxx)}).exec(function (error, count) {
if (error) {
return res.json(500, {error: 'There was an error while trying to run query'});
}
//I do what I have to do
return sails.hooks.blueprints.middleware.add(req, res);
});
} else {
//I just return the default blueprint's action
return sails.hooks.blueprints.middleware.add(req, res);
}
}
So, basically, default blueprint functions are stored in:
sails.hooks.blueprints.middleware
You should look at lifecycle callbacks in sailsjs. So for example, you can use beforeUpdate or beforeCreate lifecycle callback to do more in the model:
var bcrypt = require('bcrypt');
module.exports = {
attributes: {
username: {
type: 'string',
required: true
},
password: {
type: 'string',
minLength: 6,
required: true,
columnName: 'encrypted_password'
}
},
// Lifecycle Callbacks
beforeCreate: function (values, cb) {
// Encrypt password
bcrypt.hash(values.password, 10, function(err, hash) {
if(err) return cb(err);
values.password = hash;
//calling cb() with an argument returns an error. Useful for canceling the entire operation if some criteria fails.
cb();
});
}
};
copy everything from
PROJECT-ROOT\node_modules\sails\lib\hooks\blueprints\actions
to
PROJECT-ROOT\config\blueprints
Make sure findOne.js is lowercase. You will need to modify each one to make reference to the location of actionUtil.js. You can now modify these at your hearts content without re-inventing the wheel.