ExpressJS:如何使用参数redirectPOST请求
我需要将我的node.js服务器的所有POST请求redirect到远程服务器。
我尝试了以下操作:
app.post('^*$', function(req, res) { res.redirect('http://remoteserver.com' + req.path); });
redirect工作,但没有POST参数。 我应该修改什么来保持POST参数?
在HTTP 1.1中,有一个状态码(307),表示请求应该使用相同的方法重复请求并发送数据。
307临时redirect(自HTTP / 1.1以来)在这种情况下,请求应该与另一个URI重复,但将来的请求仍然可以使用原始URI。 与303相反,重新发送原始请求时不应更改请求方法。 例如,POST请求必须使用另一个POST请求重复。
在express.js中,状态码是第一个参数:
res.redirect(307, 'http://remoteserver.com' + req.path);
阅读关于程序员stackexchange的更多信息。
代理
如果这不起作用,您也可以代表用户从服务器向另一台服务器发出POST请求。 但请注意,这将是您的服务器将提出请求,而不是用户。 你将在本质上代理请求。
var request = require('request'); // npm install request app.post('^*$', function(req, res) { request({ url: 'http://remoteserver.com' + req.path, headers: req.headers, body: req.body }, function(err, remoteResponse, remoteBody) { if (err) { return res.status(500).end('Error'); } res.writeHead(...); // copy all headers from remoteResponse res.end(remoteBody); }); });
正常redirect:
user -> server: GET / server -> user: Location: http://remote/ user -> remote: GET / remote -> user: 200 OK
发布“redirect”:
user -> server: POST / server -> remote: POST / remote -> server: 200 OK server -> user: 200 OK