2015-12-21 172 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