我试图让 http-proxy-middleware 工作,我想要实现的是让多个 nodejs 应用程序运行,然后将代理应用程序作为反向代理服务器。
我遇到的问题是当我按下代理应用程序上的链接时,这是我的代码:
var express = require('express')
var proxy = require('http-proxy-middleware')
var app = express()
var options = {
target: 'http://localhost:1001', // target host
changeOrigin: true, // needed for virtual hosted sites
ws: false, // proxy websockets
logLevel: "debug",
pathRewrite: {
'^/foo': '/', // rewrite path
}
}
var exampleProxy = proxy(options)
app.use('/foo', exampleProxy)
app.listen(3000)
在 localhost:1001 应用程序上,我得到了路线 '/' 和 '/bar'
app.get('/', function (req, res) {
res.render('home');
});
app.get('/bar', function (req, res) {
res.render('bar');
});
如果我转到 localhost:3000/foo,它会将我重新路由到 localhost:1001/(同时在浏览器中显示 localhost:3000/),与 localhost:3000/foo/bar 相同。所以这很好用。
当我转到 localhost:3000/foo 然后按下指向“bar”的链接时,就会出现问题,然后它会将我路由到 localhost:3000/bar,这不是我在代理服务器中定义的路由。
所以我需要的是,当我按下指向 /bar 的链接时,它会将其路由到代理中的 /foo/bar 。
我试图想出一些方法来解决这个问题,但(显然)没有成功:
将端口 (1001) 添加到响应 (res.locals.portNo = "1001") 中,然后将其发送到请求中,以便代理可以检查请求的来源并添加 /foo(如果是 1001)。(我还没有尝试过,但也许这可以通过使用 cookie 来实现?)