我对如何在我的快递应用程序中正确设置API路由感到困惑.我想要的是结构化的方式来定义路线而不重复自己.作为数据库,我正在使用RethinkDB.对于每个模型,假设Exercise我在models目录中创建了一个文件.这些文件仅定义模型/模式.我认为每个模型还为我的API定义了一个端点.因此,我创建了一个routes文件夹,在其中我将路由声明在单独的文件中,例如exercises.js.这是我的目录结构:
root
??? app.js
??? bootstrap.js
??? routes
? ??? exercises.js
? ??? index.js
? ??? ...
??? models
? ??? exercise.js
? ??? ...
??? ...
Run Code Online (Sandbox Code Playgroud)
示例路由文件如下所示:
module.exports = (function() {
'use strict';
var router = express.Router();
router.get('/exercises', getAllExercises);
router.get('/exercises/:id', getExerciseById);
return router;
})();
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在重复路由前缀exercises.这是一个子前缀,因为所有路由都应该以/api.是否可以在单个路由器的前缀中定义,以便我app.use('/api', [routers])在使用app.js并告诉每个路由器具有不同的路由前缀,例如/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);
Run Code Online (Sandbox Code Playgroud)
数组语法取自官方快递文档.
Pat*_*rts 10
您可以像这样编写路径文件:
module.exports = function (app) {
'use strict';
var router = express.Router();
router.get('/', getAllExercises);
router.get('/:id', getExerciseById);
app.use('/api/exercises', router);
};
Run Code Online (Sandbox Code Playgroud)
并要求每个人都这样:
require('./routes/exercises')(app);
Run Code Online (Sandbox Code Playgroud)
请注意,您可以替换__dirname + '/...为'./....
| 归档时间: |
|
| 查看次数: |
8518 次 |
| 最近记录: |