2017-07-17 22 views
1

我試圖在Node.js中創建路由模塊& express,我不明白我做錯了什麼。`Node.js中的路由模塊無法獲取/ en/first`錯誤

的錯誤是Cannot GET /en/first

的一點是要有像EN多個文件夾,它每個文件夾的路徑。 將它們組合在index.js中並從app.js中調用它。

我的文件結構:

public 
-js 
-css 
views 
-index.js 
-en 
--about.html 
--en.js 
--home.html 
app.js 

我en.js文件

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

//en page1 
router.get('/about1', function(req, res) { 
    res.render('about1') 
}) 

//en page2 
router.get('/first', function(req, res) { 
    res.render('first') 
}) 

module.exports = router 

/views/index.js

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


router.use('./en', require('./en/')) 
router.use('./fr', require('./fr/')) 


module.exports = router 

app.js

var express = require("express"); 
var app = express(); 
var path = require('path'); 
var router = express.Router(); 

app.use(router); 

app.engine('ejs', require('ejs').__express) 
app.set('view engine', 'ejs') 

app.use(express.static(path.join(__dirname, 'public'))); 
app.use(require('./views')) 


app.listen(3000,function(){ 
    console.log("Live at Port 3000"); 
}); 

還有一個選項可以使用數組而不是類似於en.js文件中的路由?

+1

確保給你的問題明確標題,解釋問題是什麼。這樣,遇到類似問題的人就可以找到你的問題,並有可能找到答案。 –

回答

0

應該

router.use('/en', require('./en/en')) 
router.use('/fr', require('./fr/fr')) 

不應該有在任何路線點。

編輯

關於你提到的第二個問題是,你可以使用數組:

const routes = ['about1', 'first']; // array of routes 

routes.forEach(route => { 
    router.get('/' + route, function (req, res) { 
     res.render(route) 
    }); 
}); 
+0

仍然無法正常工作,錯誤;無法找到模塊'./en' –

+0

@GuyOren我已經爲'en'文件添加了正確的路線,我不知道你的'fr'路徑文件在哪裏。 – Aron

+0

fr應該是en文件夾旁邊的文件夾,其中包含相同的文件..但是如果en將起作用,那麼fr也應該是 –

0

我不認爲一個路由器可以使用另一臺路由器。而不是在app.js

app.use('./en', require('./view/en/en.js')) 
app.use('./fr', require('./view/fr/fr.js')) 

個人我不喜歡你的方式將路由器文件放在視圖文件夾,因爲他們沒有定義視圖。他們應該在他們自己的文件夾中。

對於你在最後提出的問題。路由器只是一個迷你應用程序,並且可以讓您更輕鬆地定義子路線。例如,你可以這樣做:

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

// define the home page route 
router.get('/', function (req, res) { 
    res.send('Birds home page') 
}) 
// define the about route 
router.get('/about', function (req, res) { 
    res.send('About birds') 
}) 
module.exports = router 

而且在應用程序加載此:

var birds = require('./birds') 

// ... 

app.use('/birds', birds) // basically adding prefix to all the routes in bird router :) 

產生的路線將是/只//只/約

你基本上需要三件事完成路線的定義:

  1. HTTP請求方法,如GET,PUT或POST)
  2. Route(字符串,例如「/ about」)
  3. 中間件(具有2-4參數的函數。(req,res,next)=> {})

你可以做任何你想存儲它們並構建路由。也許你可以有對象的數組,它包含了所有的信息,並做到:

arrayOfRouteObjects.forEach((element)=>{ 
    app[element.method](element.route, element.middlewares) 
}) 

你也可以有構建中間件的功能,如果你知道他們是什麼樣子:

function renderView(viewName){ 
    return (req,res,next)=>{ 
    res.render(viewName); 
    } 
} 

基本上你有2個數組存儲所有的路由和所有匹配的視圖名稱。循環他們和app.get他們所有。

相關問題