快速路由器前缀

我很困惑如何在我的快递应用程序中正确设置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); // ... 

并在每个路由文件中,删除每个路由器的前缀。方法。