2015-08-23 100 views
0

我想添加一個新的路線(/配置文件)到我的NodeJS Express網絡應用程序。我修改我的app.js文件是這樣的:404當訪問新路線

var routes = require('./routes/index'); 
var profile = require('./routes/profile'); 

app.use('/', routes); 
app.use('/profile', profile); 

的「/」索引路徑工作正常,我的問題是「/個人資料」。每當我嘗試訪問它,我得到一個404這是profile.js:

var express = require('express'); 
var router = express.Router(); 

router.get('/profile', function(req, res) { 
    var username = req.session.username; 

    if(username) { 
     res.render('profile'); 
    } else { 
     res.redirect('/login'); 
    } 
}); 

module.exports = router; 

我不明白,我因爲在'/用戶所產生,示例Express應用程序在做什麼錯工作正常。我基本上覆制了這種格式,但是它扔404。任何想法?

回答

0

在我profile.js,我有我的GET請求路徑改成這樣:

router.get('/', function(req, res) { 
    //code 
}); 

否則,router將尋找/profile/profile。當我將其更改爲/時,它只是尋找`/ profile'的根目錄,或者至少我是這麼理解的。

1

要理解你在做什麼錯誤,你應該知道Node.js使用中間件功能來路由你的請求。爲了簡化起見,你可以把它想象成一個功能鏈

中間件就像一個管道管道,請求從您定義的第一個中間件開始,併爲他們匹配的每條路徑「下」中間件堆棧處理。

因此,與以下語句您添加一箇中間件函數來處理開始的根路徑/profile任何請求,並且它是在節點的通用模式使用use方法來定義根路徑。

app.use('/profile', profile); 

的使用方法是做路由的一部分,您的情況和上面的語句將會匹配任何路線開始與路徑,包括/profile/all/profile/12甚至/profile/go/deeper/inside

但是,您希望將路由縮小到更具體的路由,所以您需要通過路由器中間件功能(您的情況爲profile)來匹配更具體的路由,而不是以/profile開頭的所有路由。

profile中間件功能實際上是在功能以便執行鏈中的下一個步驟,它會從use語句中指定的根路徑,這就是爲什麼你需要與/,而不是與重新開始的理由開始/profile。如果你想匹配ID的個人資料,你會怎麼做:

router.get('/:id', ...) 

這將與基本URL被級聯(從/ use語句),並會匹配像/profile/2/profile/abc的請求。