使用expressjs发布到远程URL

时间:2013-03-14 12:27:13

标签: node.js backbone.js express

我在我的server.js

中有这个
app.post("/leadAPI/ed",function(request,response){
//api post code here
});

在此帖子请求中,我需要将请求正文中包含的数据发布到具有特定URL的某个外部API,并使用response.send发回响应。如何以干净的方式做到这一点。在expressjs中有什么内容吗?

3 个答案:

答案 0 :(得分:4)

我会使用Mikeal Rogers的request库:

var request = require('request');

app.post("/leadAPI/ed",function(req, res){
  var remote = request('remote url');

  req.pipe(remote);
  remote.pipe(res);
});

答案 1 :(得分:3)

正如安德烈亚斯所说,这不是快递的责任。它的职责是在HTTP请求进入时调用您的函数。

您可以使用节点的内置HTTP客户端,正如Andreas在评论中提到的那样,向您的外部网站发出请求。

尝试这样的事情:

var http = require('http');

app.post("/leadAPI/ed", function(request, response) {
  var proxyRequest = http.request({
      host: 'remote.site.com',
      port: 80,
      method: 'POST',
      path: '/endpoint/url'
    },
    function (proxyResponse) {
      proxyResponse.on('data', function (chunk) {
        response.send(chunk);
      });
    });

  proxyRequest.write(response.body);
  proxyRequest.end();
});

我确信你需要调整它以处理分块响应并找出传输编码,但这就是你需要的要点。

详情请见

http://nodejs.org/api/http.html

答案 2 :(得分:1)

您可以这样做。

var request = require('request');
var url = "<remote url>"
app.post("/leadAPI/ed",function(request, response){
  request.get({url:url, headers:request.headers, body:request.body}, function (err, res, body) {
    if(!err) {
      response.status(200).send(res) // JSON.stringify(res) if res is in json
    }
  })
})

请记住,两者的内容类型应相同。