2015-06-21 145 views
1

我對如何在我的快車應用程序中正確設置API路由感到困惑。我想要的是定義路線而不重複自己的結構化方式。作爲一個數據庫,我正在使用RethinkDB。對於每個型號,假設Exercise我在models目錄中創建了一個文件。這些文件只定義模型/模式。我認爲每個模型還爲我的API定義了一個端點。因此,我創建了一個routes文件夾,我在其中聲明瞭我的路線在單獨的文件中,例如exercises.js。這是我的目錄結構:快速路由器前綴

root 
├── app.js 
├── bootstrap.js 
├── routes 
│ ├── exercises.js 
│ ├── index.js 
│ └── ... 
├── models 
│ ├── exercise.js 
│ └── ... 
└── ... 

一個例子路由文件看起來是這樣的:

module.exports = (function() { 
    'use strict'; 

    var router = express.Router(); 

    router.get('/exercises', getAllExercises); 
    router.get('/exercises/:id', getExerciseById); 

    return router; 
})(); 

正如你可以看到我是在重複路由前綴exercises。這是一個子前綴,因爲所有路由都應以/api開頭。是否可以在單個路由器的前綴中定義,以便我在app.js中使用app.use('/api', [routers]),並告訴每個路由器有不同的路由前綴,如/api/excursions/?我對我的聲明感到困惑,並要求提供反饋。我認爲有一種更好的方法來組織我的API,因爲我正在做的事情知道我也需要包含app.js中的所有路由,以將所有路由作爲數組傳遞給應用。這是我的app.js

var express = require('express'); 
var bodyParser = require('body-parser'); 
var app = express(); 

var port = process.env.PORT || 3000; 

app.use(bodyParser.json()); 

// API Routes 
var exercises = require(__dirname + '/routes/exercises'); 

app.use('/api', [exercises]); 

// Start the server 
app.listen(port); 
console.log('Listening on port '+ port); 

數組語法是取自官方表達documentation

回答

3

你可以寫你的路線文件,像這樣:

module.exports = function (app) { 
    'use strict'; 

    var router = express.Router(); 

    router.get('/', getAllExercises); 
    router.get('/:id', getExerciseById); 

    app.use('/api/exercises', router); 
}; 

並要求他們每個人是這樣的:

require('./routes/exercises')(app); 

注意,您可以用'./...取代__dirname + '/...

0

您可以爲每個Router分開你的app.use聲明:

app.use('/api/exercises', exercises); 
app.use('/api/othermodel', othermodel); 
// ... 

而且每條路線中的文件,請從每個router.METHOD前綴。

+0

太棒了,但是我會重複'app.use'語句。有沒有更好的辦法? – LordTribual