2015-06-17 32 views
1

所以我正在重構我的節點/快速應用程序,我試圖分離我的根。這是我的問題:使用/和/:slug作爲不同的路由文件來表示動態路由

我想要一個主頁,然後是一個完全不同的擴展頁面,這不屬於其他路線。

例如,假設我有3個頁面:Homepage,About,然後是URL爲「mysite.com/username123」的用戶頁面。

現在我知道(或至少相信)這可以通過做這樣的事情來完成:

var express = require('express'); 
var router = express.Router(); 
router.get('/:slug', function(req, res, next) { 
    if(req.params.slug) { 
     var data = { 
      my: 'data' 
     }; 
     res.render('index', data); 
    } else { 
     var userdata = { 
      my: 'data' 
     }; 
     res.render('user', userdata); 
    } 
}); 
module.exports = router; 

但是這不是我想做的事情;我想將這些保存在兩個不同的路由文件中。所以,我的app.js文件將有類似:

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var about = require('./routes/about'); 

app.use('/', index); 
app.use('/', users); 
app.use('/about', about); 

/users渲染,如果有一個金屬塊。這實際上是一些作品。如果沒有:slug,則加載索引文件,否則會加載用戶文件(其路徑文件中包含:slug,此處未顯示)。但是,​​被覆蓋。

現在我想我可以推​​到列表的頂部,這將工作,但這似乎非常草率,這樣做的關鍵是正確構建我的代碼。

這樣的情況應該如何妥善處理?有人能給我一些幫助嗎?

+0

發生這種情況是因爲'/ about'被'/:slug'覆蓋。換句話說,快遞無法分辨'about'是不是意味着是一個slu 012 –

+0

謝謝。我明白爲什麼會發生。我只需要知道我應該如何解決這個問題,同時保持'/:slug'不在主目錄'/' –

+0

的單獨文件中。您需要向用戶的路由添加一些內容.Ex: 'router.get('/ users /:id''' –

回答

2

它發生是因爲​​被/:slug覆蓋。換句話說,快遞公司不知道about是不是slug

的解決辦法是要麼

  1. 添加一個網址參數讓差異化的路線。

    router.get('/users/:slug')

  2. 跳到下一路線

    router.get(':slug', function (req, res, next) {` 
        if (req.params.slug === 'about') { 
         return next(); 
    } 
    
        // get user data and render 
        res.render('user', userdata); 
    }); 
    

下方附上這個​​路線。

+0

該死的。不是我所希望的優雅解決方案,但現在我要這樣做。如果沒有人能夠在接下來的24小時內提出一個更清潔的解決方案(如果有的話),我會投票標記爲解決方案。謝謝你,非常感謝。 –

+0

在我的頭頂,這是我能想到的最好的。如果您找到更優雅的解決方案,請發佈 –