在Controller中调用父操作

我试图在我的Sails.js应用程序的特定控制器中覆盖update()和create()动作。

我想要做的是上传一个文件,然后存储文件path(这是存储在s3使用船长)在请求正文,然后调用蓝图“创build()”或“更新()”行动恢复正常的工作stream程。

我看到在这种情况下使用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 }); }, 

Sails没有任何方法可以从控制器中调用默认的蓝图动作代码。 但是,您可以轻松覆盖蓝图代码。 只需将您自己的update.js文件放在api / blueprints.js文件夹中(您可能需要创build文件夹),使用核心的update.js源代码作为起点。

当然,这将覆盖所有模型的蓝图。 如果你只是想重写一个模型,你必须在控制器里面这样做。 在这种情况下,使用next()实际上没有什么问题,除非在这种情况下它不起作用。 默认蓝图路由不绑定到已经有相同名称的自定义操作的URL。 如果你打电话next() ,你会得到一个404。

如果要覆盖某些 (但不是所有模型)的蓝图,则可以将共享代码放入服务中 ,然后从每个控制器中的单个update操作中调用服务代码。

您可以使用以下res.redirect('/yourControllerName/create');来结束update控制器操作: res.redirect('/yourControllerName/create');

如果你想传递任何参数,你可以直接传递它: res.redirect('/yourControllerName/create?param1=value1&param2=value2');

或者你可以在req.session存储你所需要的req.session ,并在你的create动作中抓住它,然后清除它(我不知道这是否是好的做法,但工作)。