expressjs在Windows和UNIX之间路由不同的行为

时间:2018-09-24 08:35:16

标签: express express-router

在主要由gitbook生成的静态网站之上添加中间件身份验证+授权的nodejs站点中,路由方案在windows环境(Windows 10或Windows Server)和{{ 1}}(Linux上的Azure应用服务)。

带有静态网站的中间件说明了路由模式的容忍度

unix docker
  • 在Windows上:如果未在路由“ /:book?/ *”中进行身份验证,则可以正确重定向到“ /:book?/ login /:originalUrl?”
  • 在unix上(对于相同的URL):如果未通过身份验证,则重定向将再次转到'/:book?/ *'并循环

在从win转换为unix的过程中,由于URI(即使在路由中使用// authentication route + keeping incoming url for further redirection router.get('/:book?/login/:originalUrl?', function (req, res) { passport.authenticate('azuread-openidconnect', { customState: req.params.originalUrl, failureRedirect: '/' }, callbackwhatever); }); // all-in route + authentication check router.get('/:book?/*', (req, res) => { var book = req.params.book; if (!req.isAuthenticated()) { res.redirect('/' + (book || 'default') + '/login/' + encodeURIComponent(req.originalUrl)); } else [sending content] }); 进行编码,我也遇到了另一种类似的情况,我通过将数据传输到body + POST查询来解决该问题。身份验证方案。

经过常规测试后,我几乎可以确定问题出在encodeURIComponent上,但是我找不到有关如何在快速重定向方案中解决该问题的参考。

版本

  • 表达encodeURIComponent(req.originalUrl)

  • 赢节点4.15.5

  • unix节点7.1.0

0 个答案:

没有答案