ExpressJS:如何使用参数重定向POST请求

时间:2013-07-12 10:19:35

标签: node.js express

我需要将node.js服务器的所有POST请求重定向到远程服务器。

我尝试了以下操作:

app.post('^*$', function(req, res) {
  res.redirect('http://remoteserver.com' + req.path);
});

重定向有效,但没有POST参数。我应该修改什么来保留POST参数?

1 个答案:

答案 0 :(得分:52)

在HTTP 1.1中,有一个状态代码(307),表示应该使用相同的方法重复请求并发布数据。

  

307临时重定向(自HTTP / 1.1起)在这种情况下,请求应该使用另一个URI重复,但将来的请求仍然可以使用原始URI。与303相反,在重新发出原始请求时不应更改请求方法。例如,必须使用另一个POST请求重复POST请求。

在express.js中,状态代码是第一个参数:

res.redirect(307, 'http://remoteserver.com' + req.path);

programmers 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);
    });
});

正常重定向:

user -> server: GET /
server -> user: Location: http://remote/
user -> remote: GET /
remote -> user: 200 OK

发布“重定向”:

user -> server: POST /
server -> remote: POST /
remote -> server: 200 OK
server -> user: 200 OK