3

我的 server.js 中有这个

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

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

4

3 回答 3

6

正如 Andreas 所说,这不是 express 的职责。它的职责是在 HTTP 请求进来时调用你的函数。

您可以使用 node 的内置 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

于 2013-03-14T12:59:21.687 回答
5

我会为此使用 Mikeal Rogers 的请求库:

var request = require('request');

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

  req.pipe(remote);
  remote.pipe(res);
});
于 2013-03-14T13:04:07.113 回答
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
    }
  })
})

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

于 2019-02-07T12:42:08.380 回答