【问题标题】:Express adds slash at the end of url weirdlyExpress 奇怪地在 url 末尾添加了斜杠
【发布时间】:2016-03-27 06:39:12
【问题描述】:

我正在使用 Node.js 和 Express 框架来开发网站。我在使用 url 时遇到了奇怪的不当行为。当我点击相关链接 url 时,url 变为“localhost:3000/images/” - 如您所见,最后添加了一个斜杠。但是,当我将所有“图像”更改为“img”或者 url 变为“localhost:3000/img”时,没有添加斜杠。为什么路由器会这样?下面写的代码。 (我用的是 Jade 模板引擎)

//bar.jade    
li.nav-item
      a.nav-link(href='images')
        i.icon-camera
        |  Images

//end of bar.jade


//images.js (router)
var express = require('express');
var router = express.Router();

/* GET home page. */

router.get('/', function(req, res, next) {
  res.render('images', { title: 'Express'});
});

module.exports = router;
//end of router .js



//app.js
var images =require('./routes/images');
........
........
app.use('/images',images);
//end of app.js

【问题讨论】:

  • 尝试在隐身/私密模式下运行您的浏览器,看看它是否仍然发生。还要检查浏览器的开发工具,看看到底发生了什么。
  • 它在私有模式和其他浏览器中的行为方式相同。我检查了html,它看起来很正常。我没有太多使用浏览器的开发工具。你觉得我应该检查什么?
  • 具体是加载/images时的初始服务器响应(无论服务器是否返回301/302状态)。
  • 我通过 Webstorm 的控制台进行了检查。它显示 'GET /images 303' 'GET /images/ 304' 然后所有资产都以 304 响应加载
  • 是的,我发现了问题:-)

标签: node.js express pug


【解决方案1】:

默认情况下,快速路由器“/foo”和“/foo/”被路由器视为相同。您可以使用strict: true 选项禁用此行为。

Express.Router documentation

var router = express.Router({strict: true});

【讨论】:

  • 它们的处理方式相同,但从问题来看,似乎存在从 /images/images/ 的重定向,这不是 Express 所做的。
  • 是的,@robertklep 是对的。我在同一代码中尝试了不同的词,但只有“图像”词,Express 重定向。
【解决方案2】:

我想我知道发生了什么:您还使用了express.static() 中间件,并且在您的公共目录中有一个名为images/ 的目录。

当您尝试请求与公共目录匹配的 URL 时(即使该目录为空或匹配另一个路由),此中间件将生成以斜杠结尾的重定向。

要禁用此行为,请将redirect option 设置为false

【讨论】:

  • 你是对的。我删除了图像文件夹,它没有重定向。我印象深刻。
  • @Emre 表明您在提问时提供了所有信息;D
  • 天哪。就是这个。我一直在寻找这个答案,天知道有多久了。你是救生员。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多