2015-06-21 148 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