Вызов родительского действия в контроллере


Я пытаюсь переопределить действия 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 2

2 ответа:

Не существует ни одного способа обеспечивается паруса для вас, чтобы позвонить копирку код действие по умолчанию в контроллере. Однако есть способ для вас легкопереопределить код чертежа. Просто разместите свое собственное обновление .JS файл в api/blueprints.папка js (Возможно, вам придется создать эту папку), используя обновление ядра .исходный код js в качестве отправной точки.

Конечно, это переопределит схему для всех моделей. Если ты только захочешь ... переопределите его для одной модели, вам придется сделать это внутри контроллера, как в вашем примере. В этом случае не было бы ничего плохого в использовании next(), за исключением того, что в этом случае он не будет работать. Маршруты схемы элементов по умолчанию не привязаны к URL-адресам, для которых уже существует пользовательское действие с тем же именем. Если вы позвоните next(), вы получите 404.

Если вы хотите переопределить схему элементов для некоторых , но не для всех моделей, вы должны поместить общий код в сервис , и вызовите сервисный код из отдельных update действий в каждом контроллере.

Вы можете завершить действие контроллера update следующим образом:: res.redirect('/yourControllerName/create');

Если вы хотите передать какие-либо параметры, вы можете передать их непосредственно: res.redirect('/yourControllerName/create?param1=value1&param2=value2');

Или вы можете сохранить то, что вам нужно в req.session и захватить его в своем действии create, а затем очистить его (я не знаю, является ли это хорошей практикой, но работает).