【发布时间】:2015-09-07 02:25:27
【问题描述】:
我对如何在我的 express 应用中正确设置 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。
【问题讨论】: