Как вызывать действия по умолчанию по умолчанию в пользовательской переопределенной?
SailsJS предоставляет действия по умолчанию, такие как поиск, обновление, создание и т.д.
Мне нужно переопределить некоторые из них в соответствии с конкретными бизнес-целями. Однако я хотел бы добавить к ним, а не просто переопределить их. Как вызвать действия плана по умолчанию в основном действии.
Например, обновление может обновить запись модели.
update
Я хочу, чтобы обновление делало больше, помимо обновления записи модели. В моем настраиваемом методе обновления я не хочу дублировать обновление по умолчанию. Как я могу это сделать?
Ответы
Ответ 1
скопировать все из
PROJECT-ROOT\node_modules\sails\lib\hooks\blueprints\actions
к
PROJECT-ROOT\config\blueprints
Убедитесь, что findOne.js имеет строчный формат. Вам нужно будет изменить каждый из них, чтобы сделать ссылку на местоположение actionUtil.js
. Теперь вы можете изменить их в своем сердце, не изобретая колесо.
Ответ 2
Я просто столкнулся с той же проблемой и нашел другой способ ее исправить. Это может помочь в будущем, если у кого-то есть такая же проблема. Наконец, я решил перезаписать действие в контроллере, в моем случае это было add
, а затем, после того, как вы сделали что-то внутри, называли действие по умолчанию.
Итак, мой код выглядит следующим образом:
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 action
return sails.hooks.blueprints.middleware.add(req, res);
}
}
Итак, в основном, функции чертежа по умолчанию хранятся в:
sails.hooks.blueprints.middleware
Ответ 3
Вы должны посмотреть обратные вызовы жизненного цикла в sailsjs. Так, например, вы можете использовать beforeUpdate
или beforeCreate
обратный вызов жизненного цикла, чтобы сделать больше в модели:
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();
});
}
};