在expressjs版本4中req.url和req.originalUrl之间的区别

我正在尝试在expressJS版本4应用程序中实现loginfunction。 我需要确定用户是否已经login,然后才能执行某些操作。 所以我有一个名为isLoggedIn的中间件,它只会检查用户对象是否在会话中,如果不是,则将用户redirect到login页面。 用户成功login后,必须redirect到原始URL。

app.get('/someaction', isLoggedIn, 'actual function to be executed'); 

现在在isLoggedIn方法中,我看到req.url和req.originalUrl包含请求的操作。 但是,如果用户没有login,当redirect到/ login页面时,req.url和req.originalUrl都有“/ login”作为内容。 从我在这里读到的,我可以覆盖req.url内部路由的目的。 但是在我的情况下,req.url和req.originalUrl都通过“/ login”操作来获取。 我究竟做错了什么?

问题是实际上有两个完全独立的请求进入你的服务器。 /login页面的请求不知道客户请求的页面。 因此,当您redirect到/login页面时,您需要保存有关最初请求的URL的信息。 我知道2个解决scheme:

  1. 一些花哨的会话状态工作可以让你保存原始的URL作为variables,可能使用承诺。

  2. 将原始URL作为查询参数添加到/login请求。

看看这个答案: 如何在redirectExpress 4之前find原始请求path