2015-12-21 183 views
1

我使用Node.js和Express框架开发网站。我遇到了一个带有URL的怪异行为。当我点击相关的链接url时,url变为“localhost:3000/images /” - 如你所见,在最后添加一个斜杠。但是,当我将所有'图像'更改为'img'或其他网址变成“localhost:3000/img”时,没有添加斜线。为什么路由器的行为如此?代码如下。 (我用玉模板引擎)Express在网址末尾添加了斜杠

//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 
+0

尝试在隐身/私密模式下运行浏览器以查看它是否仍然发生。同时检查你的浏览器的开发工具,看看究竟发生了什么。 – robertklep

+0

它在私人模式和其他浏览器中的行为方式也一样。我检查了html,看起来很正常。我没有使用浏览器的开发工具。你认为我应该检查什么? – Emre

+0

特别是加载'/ images'时的初始服务器响应(无论服务器是否返回301/302状态)。 – robertklep

回答

4

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

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

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

+0

你说得对。我删除了图像文件夹,并没有重定向。我印象深刻。 – Emre

+2

@Emre表明您在提问时提供_all_信息; D – robertklep

0

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

Express.Router documentation

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

他们被视为相同,但从这个问题听起来像是有一个重定向从'/ images'到'/ images /',这不是Express所做的。 – robertklep

+0

是的,@robertklep是对的。我在相同的代码中尝试了不同的单词,但只有'图像'单词,Express重定向。 – Emre