快速路由器前缀

Lor*_*ual 8 node.js express

我对如何在我的快递应用程序中正确设置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 + '/...'./....