Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在控制器中调用父操作_Javascript_Node.js_Sails.js - Fatal编程技术网

Javascript 在控制器中调用父操作

Javascript 在控制器中调用父操作,javascript,node.js,sails.js,Javascript,Node.js,Sails.js,我试图在Sails.js应用程序的特定控制器中重写update()和create()操作 我试图做的是先上传一个文件,然后将文件路径(使用skipper存储在s3上)存储在请求体中,然后调用blueprint“create()”或“update()”操作来恢复正常的工作流 我发现在这些情况下不建议使用next(),所以我想知道这里使用的最佳方法是什么 update: function(req, res) { var options = { adapter: require

我试图在Sails.js应用程序的特定控制器中重写update()和create()操作

我试图做的是先上传一个文件,然后将文件路径(使用skipper存储在s3上)存储在请求体中,然后调用blueprint“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
    });
},

您可以通过以下操作结束
更新
控制器操作:
res.redirect('/yourControllerName/create')

如果要传递任何参数,可以直接传递:
res.redirect('/yourControllerName/create?param1=value1¶m2=value2')


或者您可以在
req.session
中存储所需内容,并在
create
操作中获取它,然后清除它(我不知道这是否是一个好的做法,但确实有效)。

Sails没有提供任何方法让您从控制器中调用默认的blueprint操作代码。但是,有一种方法可以方便地重写blueprint代码。只需将自己的update.js文件放在api/blueprints.js文件夹中(您可能需要创建该文件夹),使用作为起点

当然,这将覆盖所有模型的蓝图。如果您只想为单个模型覆盖它,那么您必须在控制器内这样做,如您的示例所示。在这种情况下,使用
next()
实际上没有什么错,只是在这种情况下,它不起作用。默认蓝图路由不会绑定到已经有相同名称的自定义操作的URL。如果您调用
next()
,您将得到一个404


如果您想覆盖某些(而不是所有)型号的蓝图,您可以将共享代码放在a中,并从每个控制器中的单个
update
操作调用服务代码。

请注意,需要打开快捷方式(不建议用于生产)才能工作。真的吗?我的代码带有
res.redirect('/controller/action')似乎可以正常工作。因此,我基本上需要将代码从blueprint复制粘贴到控制器的update()方法中,对吗?