在我的场景中,我需要向另一个终点转发请求。在我的机器上有两个服务器php和node.js服务器。 Node.js就像一个“中间人”,PHP服务器必须以同样的方式工作。
Node.js服务器代码
var express = require('express');
var fs = require('fs');
var path = require('path');
var http = require('http');
var https = require('https');
var app = express();
var HTTP_PORT = 3000;
// Create an HTTP service
http.createServer(app).listen(HTTP_PORT,function() {
console.log('Listening HTTP on port ' + HTTP_PORT);
});
//endpoint for tracking
app.get('/track', function(req, res) {
sendRequestToOtherEndPoint(req);
processRequest(req);
res.setHeader('Content-Type', 'application/json');
res.send('Req OK');
});
function processRequest(req){
console.log("request processed");
}
function sendRequestToOtherEndPoint(req){
//magic here :)
}
当此服务器在端口3000中收到get请求时,它会处理请求信息,并且必须将相同的请求转发到另一个端点。
例如:
答案 0 :(得分:11)
根据您尝试执行的操作,您可以为终点创建新请求:
//endpoint for tracking
app.get('/track', function(req, res) {
req.get({url: 'http://end-point', headers: req.headers});
processRequest(req);
res.setHeader('Content-Type', 'application/json');
res.send('Req OK');
});
答案 1 :(得分:1)
在你的情况下,request.redirect
可能会有帮助。
app.get('/track', function(req, res) {
//process the request
//then redirect
req.redirect('/final-endpoint');
});
然后在最终的endpont中捕获重定向的请求。
app.get('/final-endpoint', function(req, res) {
// proceess redirected request here.
});
请参阅Express docs
答案 2 :(得分:1)
如果您的第二个端点位于不同的服务器上(例如PHP),那么您将需要重定向客户端(如sohel's answer中所述),或者将来自Node的请求欺骗到PHP服务器,然后将响应发送回客户端。后一种选择绝对不重要,所以我会质疑不使用客户端重定向是否至关重要。
如果您正在谈论两个快速端点,那么我认为最简单的答案可能不是实际转发,而是直接使用端点回调:
app.get('/track', trackCallback);
app.get('/otherendpoint', otherendpointCallback);
function otherendpointCallback(req, res) {
// do your thing
}
function trackCallback(req, res) {
otherendpointCallback(req, res);
processRequest(req);
res.setHeader('Content-Type', 'application/json');
res.send('Req OK');
};
根据您在另一个端点的确切要求,您可能需要欺骗某些req
的字段(例如req.url
)