Вызов родительского действия в контроллере
Я пытаюсь переопределить действия update() и create() в определенном контроллере моих парусов.приложение js.
Что я пытаюсь сделать, так это сначала загрузить файл, затем сохранить путь к файлу (который хранится на s3 с помощью skipper) в теле запроса, а затем вызвать действие "create()" или "update ()", чтобы возобновить нормальный рабочий процесс.
Я видел, что использование next() в этих случаях не рекомендуется, поэтому я хотел бы знать, какой подход лучше всего использовать здесь.
update: function(req, res) {
var options = {
adapter: require('skipper-s3'),
key: sails.config.s3.accessKeyId,
secret: sails.config.s3.secretAccessKey,
bucket: sails.config.s3.bucket,
region: sails.config.s3.region
};
req.file('image').upload(options, function(err, files) {
if (err) res.error(err);
_.each(files, function(file){
req.body['logo'] = file.extra.Location;
});
// CALL PARENT HERE
});
},
2 ответа:
Не существует ни одного способа обеспечивается паруса для вас, чтобы позвонить копирку код действие по умолчанию в контроллере. Однако есть способ для вас легкопереопределить код чертежа. Просто разместите свое собственное обновление .JS файл в api/blueprints.папка js (Возможно, вам придется создать эту папку), используя обновление ядра .исходный код js в качестве отправной точки.
Конечно, это переопределит схему для всех моделей. Если ты только захочешь ... переопределите его для одной модели, вам придется сделать это внутри контроллера, как в вашем примере. В этом случае не было бы ничего плохого в использовании
next()
, за исключением того, что в этом случае он не будет работать. Маршруты схемы элементов по умолчанию не привязаны к URL-адресам, для которых уже существует пользовательское действие с тем же именем. Если вы позвонитеnext()
, вы получите 404.Если вы хотите переопределить схему элементов для некоторых , но не для всех моделей, вы должны поместить общий код в сервис , и вызовите сервисный код из отдельных
update
действий в каждом контроллере.
Вы можете завершить действие контроллера
update
следующим образом::res.redirect('/yourControllerName/create');
Если вы хотите передать какие-либо параметры, вы можете передать их непосредственно:
res.redirect('/yourControllerName/create?param1=value1¶m2=value2');
Или вы можете сохранить то, что вам нужно в
req.session
и захватить его в своем действииcreate
, а затем очистить его (я не знаю, является ли это хорошей практикой, но работает).