快速路由器前缀
我很困惑如何在我的快递应用程序中正确设置API路由。 我想要的是结构化的方式来定义路线,而不用重复自己。 作为一个数据库,我正在使用RethinkDB。 对于每个模型,我们假设Exercise
已经在models
目录中创build了一个文件。 这些文件只定义模型/模式。 我认为每个模型也为我的API定义了一个端点。 因此,我已经创build了一个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);
数组语法取自官方的快递文档 。
你可以这样编写你的路由文件:
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 + '/...
'./...
replace__dirname + '/...
你可以分开你的每个Router
app.use
语句:
app.use('/api/exercises', exercises); app.use('/api/othermodel', othermodel); // ...
并在每个路由文件中,删除每个路由器的前缀。方法。