Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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
Angularjs 网页包不接受POST请求_Angularjs_Angular_Webpack_Webpack Dev Server - Fatal编程技术网

Angularjs 网页包不接受POST请求

Angularjs 网页包不接受POST请求,angularjs,angular,webpack,webpack-dev-server,Angularjs,Angular,Webpack,Webpack Dev Server,我目前正在开发一个Angular 2 web应用程序,它可以与API进行通信。在应用程序中,用户可以选择支付选项,API将返回支付服务的url 问题在于,支付服务使用POST进入确认页面,该页面因某种原因不被WebPack接受,它只允许GET请求,我们得到以下错误: 无法过帐/选择/付款方式 有人知道我们如何配置允许POST请求的网页吗?我已经联系了付款提供商,但不可能执行GET请求而不是POST 谢谢Webpack dev server仅用作您的前端服务器,例如为您的静态资产提供服务。因此,只

我目前正在开发一个Angular 2 web应用程序,它可以与API进行通信。在应用程序中,用户可以选择支付选项,API将返回支付服务的url

问题在于,支付服务使用POST进入确认页面,该页面因某种原因不被WebPack接受,它只允许GET请求,我们得到以下错误:

无法过帐/选择/付款方式

有人知道我们如何配置允许POST请求的网页吗?我已经联系了付款提供商,但不可能执行GET请求而不是POST


谢谢

Webpack dev server仅用作您的前端服务器,例如为您的静态资产提供服务。因此,只支持GET请求

如果您想使用代理服务器或后端服务器,那么应该实现这一点。你可以用这个。
请参阅。

Webpack dev服务器仅用作前端服务器,例如,用于服务静态资产。因此,只支持GET请求

如果您想使用代理服务器或后端服务器,那么应该实现这一点。你可以用这个。
请参阅。

至少不获取404错误的黑客方法是将请求代理到/selection/payment method,然后返回空响应或任何您想要的内容,我认为res是Express类的一个实例,通过在webpack.config.js中添加以下内容:


文档。

至少不出现404错误的一种黑客方法是将请求代理到/selection/payment method,然后返回一个空响应或任何您想要的内容,我认为res是Express类的一个实例,通过在webpack.config.js中添加以下内容:


文档。

感谢@robertklep向我发送了代理文档的链接,我们找到了解决方法。我们需要做的不是处理POST请求,而是以某种方式将其转换为GET。在阅读了更多的文档之后,我们看到了webpack dev服务器配置的setup:property

使用setup:property可以获得expressjs对象,并且可以在它到达表示Cannot POST/url/to/page的路由之前捕获url

我们的结局是:

devServer: {
    setup: function(app) {
        app.post('/selection/payment-method', function(req, res) {
          res.redirect('/selection/payment-method');
        });
    },
}
这样,我们得到了一个GET请求而不是POST,并且我们的应用程序执行了一个API请求来检查支付是否成功


这只用于开发

感谢@robertklep,他给我发送了指向代理文档的链接,我们找到了解决方法。我们需要做的不是处理POST请求,而是以某种方式将其转换为GET。在阅读了更多的文档之后,我们看到了webpack dev服务器配置的setup:property

使用setup:property可以获得expressjs对象,并且可以在它到达表示Cannot POST/url/to/page的路由之前捕获url

我们的结局是:

devServer: {
    setup: function(app) {
        app.post('/selection/payment-method', function(req, res) {
          res.redirect('/selection/payment-method');
        });
    },
}
这样,我们得到了一个GET请求而不是POST,并且我们的应用程序执行了一个API请求来检查支付是否成功


这只用于开发

根据@Sven的回答,对设置进行修改,使其在POST中始终有效

在webpack.config.js中添加对body parser、sync request和Add require的依赖关系

var bodyParser = require('body-parser');
var request = require('sync-request');
在webpack.config.js的devServer部分

devServer: {
        setup: function(app) {
            app.use(bodyParser.json());
            app.use(bodyParser.urlencoded({
                extended: true
            }));

            app.post(/^\/(URL1|URL2|URL3)\//, function(req, res) {
                var serviceCallResponse = request('POST', 'your app server url here' + req.originalUrl, {
                    json:req.body
                });
                res.send(serviceCallResponse.getBody('utf8'));
            });
        },
        proxy: {
            '*/other URLs proxy/*': 'your app server url here'
        }
}
将URL1/2更改为要代理的URL,然后将应用程序服务器的地址放在其中


这将适用于在json有效负载上工作的各种POST请求代理

,根据@Sven的回答,对设置进行修改,使其始终适用于POST

在webpack.config.js中添加对body parser、sync request和Add require的依赖关系

var bodyParser = require('body-parser');
var request = require('sync-request');
在webpack.config.js的devServer部分

devServer: {
        setup: function(app) {
            app.use(bodyParser.json());
            app.use(bodyParser.urlencoded({
                extended: true
            }));

            app.post(/^\/(URL1|URL2|URL3)\//, function(req, res) {
                var serviceCallResponse = request('POST', 'your app server url here' + req.originalUrl, {
                    json:req.body
                });
                res.send(serviceCallResponse.getBody('utf8'));
            });
        },
        proxy: {
            '*/other URLs proxy/*': 'your app server url here'
        }
}
将URL1/2更改为要代理的URL,然后将应用程序服务器的地址放在其中


这将适用于在json有效负载上工作的各种请求后代理

您是否正在生产中运行webpack dev server?@robertklep否在我们的生产服务器上未生产我们安装了nginx,它提供静态html、js和css。但是,当我们在开发确认页面时,我们需要一种方法来开发确认页面。您是否在生产环境中运行webpack dev server?@robertklep No不在生产环境中,我们在生产环境中安装了nginx,它提供静态html、js和css。但是,当我们在开发时,我们需要一种开发确认页面的方法。我们的应用程序只提供静态资产,在确认页面,它执行API请求以检查支付是否成功。在生产中,我们使用nginx来提供静态html、js和css,这一切都很顺利。太糟糕了,网页包开发服务器不允许它。无论如何,谢谢你的回答!这不是一个很好的答案。代理的全部用途是在开发期间代理数据服务器。这不行
多好的代理得到,而不是张贴。实际上,大多数时候它都是代理POST,我只看到它在某些情况下失败。代理数据是webpack dev server最基本的功能之一。很抱歉,我不得不否决你的答案。我们的应用程序只提供静态资产,在确认页面,它会执行API请求以检查付款是否成功。在生产中,我们使用nginx来提供静态html、js和css,这一切都很顺利。太糟糕了,网页包开发服务器不允许它。无论如何,谢谢你的回答!这不是一个很好的答案。代理的全部用途是在开发期间代理数据服务器。代理获取而不是发布没有多大好处。实际上,大多数时候它都是代理POST,我只看到它在某些情况下失败。代理数据是webpack dev server最基本的功能之一。很抱歉,我不得不否决你的答案。谢谢你的建议!在检查了您发送的文档中的更多设置后,我们以不同的方式对其进行了黑客攻击。使用代理,无论是GET还是POST请求,请求都会被终止。如果您使用setup:而不是proxy:您将获得express对象,并且可以在它是post或put或其他任何内容时执行操作。我在答案中添加了示例代码。谢谢你的建议!在检查了您发送的文档中的更多设置后,我们以不同的方式对其进行了黑客攻击。使用代理,无论是GET还是POST请求,请求都会被终止。如果您使用setup:而不是proxy:您将获得express对象,并且可以在它是post或put或其他任何内容时执行操作。我在回答中添加了示例代码。您将如何在生产中执行类似的操作?您将如何在生产中执行类似的操作?