为了避免同域 AJAX 问题,我希望我的 Node.js Web 服务器转发来自 URL 的所有请求/api/BLABLA
例如到另一台服务器other_domain.com:3000/BLABLA
,并透明地向用户返回该远程服务器返回的相同内容。
所有其他 URL(除了/api/*
)将直接提供服务,无需代理。
如何使用 Node.js + Express.js 实现此目的?你能给出一个简单的代码示例吗?
(网络服务器和远程服务器3000
服务器在我的控制之下,都运行node.js和express.js)
到目前为止我发现了这个https://github.com/http-party/node-http-proxy,但是阅读那里的文档并没有让我变得更明智。我最终得到
var proxy = new httpProxy.RoutingProxy();
app.all("/api/*", function(req, res) {
console.log("old request url " + req.url)
req.url = '/' + req.url.split('/').slice(2).join('/'); // remove the '/api' part
console.log("new request url " + req.url)
proxy.proxyRequest(req, res, {
host: "other_domain.com",
port: 3000
});
});
但没有任何内容返回到原始 Web 服务器(或最终用户),所以运气不好。
注意request自 2020 年 2 月起已被弃用,因此出于历史原因,我将在下面留下答案,但请考虑转向此中列出的替代方案issue,移至本机内置的 Fetch API(从 Node 18 开始),或使用快速 HTTP 代理.
原答案
我做了类似的事情,但我用了request反而:
var request = require('request');
app.get('/', function(req,res) {
//modify the url in any way you want
var newurl = 'http://google.com/';
request(newurl).pipe(res);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)