NodeJS Express 3、Apache代理和基本路径

yb3bgrhw  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(127)

我有一个较旧的Express 2.5.9应用程序,我正在用Express 3.4.x进行更新。在生产环境中,应用程序由Apache使用RewriteRule进行代理:

RewriteRule ^/path/to/app/(.*)$ http://nodeserver.example.com:3000/$1 [P,L]
RewriteRule ^/path/to/app$ /path/to/app/ [R,L]

因此,在生产环境中,http://example.com/path/to/app/foo被代理到http://nodeserver.example.com:3000/foo,Express正常处理/foo路由。
在Express 2.x中,我使用了basepath设置,以便在生产环境中正确处理重定向(例如:如果我需要重定向到/login,则basepath设置(设置为/path/to/app)实际上会重定向到/path/to/app/loginbasepath未在开发中设置(例如访问http://localhost:3000上的应用程序)。
basepath在Express 3中被删除了,所以设置不再起作用,我的重定向也不起作用(例如如果我转到http://example.com/path/to/app/admin,则路由器具有重定向到/login中间件,该中间件最终被重定向到http://example.com/login
我可以重写我的重定向

res.redirect('/login')

var redirectUrl = config.basepath ? config.basepath + '/login' : '/login'
res.redirect(redirectUrl)

但这看起来不太优雅
我已经考虑过安装方法,但对于这种情况似乎有点矫枉过正。

nxagd54h

nxagd54h1#

根据Express API文档,您可能只需将

res.redirect('/login')

res.redirect('login')

并使用mounting-approach,因为这似乎是自版本3以来的正确方法。

相关问题