我在我的server.js
中有这个app.post("/leadAPI/ed",function(request,response){
//api post code here
});
在此帖子请求中,我需要将请求正文中包含的数据发布到具有特定URL的某个外部API,并使用response.send发回响应。如何以干净的方式做到这一点。在expressjs中有什么内容吗?
答案 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();
});
我确信你需要调整它以处理分块响应并找出传输编码,但这就是你需要的要点。
详情请见
答案 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
}
})
})
请记住,两者的内容类型应相同。