1

我有一个较旧的 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代理到http://nodeserver.domain.com:3000/foo,并且 Express 正常处理 /foo 路由。

在 Express 2.x 中,我使用了该basepath设置,以便在生产中正确处理重定向(例如,如果我需要重定向到/loginbasepath设置为/path/to/app实际上会重定向到/path/to/app/login.basepath在开发中未设置(例如访问应用程序 at http://localhost:3000)。

basepath已在 Express 3 中删除,因此设置不再起作用,我的重定向也不起作用(例如,如果我转到http://domain.com/path/to/app/admin,该路由具有重定向到 的中间件,/login最终被重定向到http://domain.com/login)。

我可以重写我的重定向

res.redirect('/login')

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

但这似乎不优雅。

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

4

1 回答 1

1

根据Express API 文档,您可能应该转

res.redirect('/login')

res.redirect('login')

并执行安装方法,因为这似乎是自版本 3 以来的正确方法。

于 2014-02-22T12:12:51.707 回答