Webpack不接受POST请求
我目前正在开发一个与API通信的Angular 2 Web应用程序。在应用程序中,用户可以选择付款选项,API将把url返回给付款服务。Webpack不接受POST请求
的问题是,支付服务使用POST去确认页,其中的WebPack不接受(由于某种原因,只允许GET请求),我们得到以下错误:
Cannot POST /selection/payment-method
有谁知道我们如何配置WebPack允许POST请求吗?我已经联系了支付提供商,但不可能执行GET请求而不是POST。
感谢
感谢@robertklep谁给我的代理文档的链接,我们找到了一种方法来处理它。我们需要做的不是处理我们需要的POST请求,而是将它转换成GET。在阅读了更多的文档后,我们发现setup:
属性为webpack-dev-server
配置。
通过setup:
属性,您可以获得expressjs对象,并且您可以在找到指示Cannot POST /url/to/page
的路线之前抓到网址。
我们结束了这一点:
devServer: {
setup: function(app) {
app.post('/selection/payment-method', function(req, res) {
res.redirect('/selection/payment-method');
});
},
}
这样,我们得到了一个GET请求而不是POST和我们的应用程序的API请求,以检查是否支付成功与否。
这只用于开发!
的的WebPack-DEV-服务器仅作为唯一的前端服务器,例如。为您的静态资产提供服务。因此只支持GET请求。
如果您想要使用代理服务器或后端服务器,那么您应该实现这一点。您可以使用Express。 见how you can setup basic routing。
我们的应用程序只提供静态资产,并在确认页面执行API请求以检查付款是否成功。在生产中,我们使用nginx来为静态html,js和css提供服务,并且它很好。太糟糕了,webpack-dev-server不允许它。 无论如何感谢您的答案! –
这不是一个很好的答案。代理的全部目的是在开发时间代理数据服务器。代理GET和POST并没有太大好处。它实际上大部分时间都是代理POST,在某些情况下我只看到它失败。 – user959690
一个的hackish方式至少不会得到404错误是代理请求/selection/payment-method
并发送回一个空应答(或任何你想要的内容,我认为res
是快递的Response类的实例),对于他们来说,通过增加下面以webpack.config.js
:
devServer: {
proxy: {
'/selection/payment-method': {
bypass : (req, res) => res.end()
}
}
}
文档here。
感谢您的建议!在检查了您发送的文档中的更多设置后,我们以不同的方式“破解”了它。使用代理,无论它是GET还是POST请求,请求都会被终止。 如果您使用'setup:'而不是'proxy:',您可以获得明确的对象,并且您可以在发布帖子或投入或其他任何内容时进行操作。我在示例代码中添加了示例代码。 –
基于@斯文的答案,修改设置,使之适用于所有POST整个
添加依赖于body-parser
,sync-request
并在webpack.config.js添加需要两个依赖
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'
}
}
更改网址1/2至要代理的URL并且你放置你的应用服务器地址。
这将为(上JSON有效载荷工作)
是否运行在生产'的WebPack-DEV-server' POST请求代理的各种工作? – robertklep
@robertklep没有在我们的生产服务器上生产,我们安装了nginx,它提供静态html,js和css。但是当我们正在开发时,我们需要一种方法来开发确认页面。 –