Express 3,Apache代理和basepath

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

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

因此,在生产中, http://domain.com/path/to/app/foo ://domain.com/path/to/app/foo被代理到http://nodeserver.domain.com:3000/foo ,而Express则正常处理/ foo路由。

在Express 2.x中,我使用了basepath设置,以便在生产环境中正确处理redirect(例如,如果我需要redirect到/loginbasepath设置,设置为/path/to/app将实际redirect到/path/to/app/login 。在开发中没有设置basepath (例如,在http://localhost:3000访问应用程序)。

在Express 3中已经删除了basepath ,所以设置不再起作用,我的redirect也没有(例如,如果我去http://domain.com/path/to/app/admin ,该路由有中间件redirect到/login ,最终被redirect到http://domain.com/login )。

我可以重写我的redirect

 res.redirect('/login') 

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

但这似乎不雅。

我已经考虑过安装方法,但是对于这种情况似乎有些矫枉过正。

根据Express API文档,您应该转向

 res.redirect('/login') 

 res.redirect('login') 

并采取挂载方式,因为这似乎是从第3版开始的正确方法。