【问题标题】:Express Router Prefix快速路由器前缀
【发布时间】: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

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    你可以这样写你的路由文件:

    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 + '/... 替换为'./...

    【讨论】:

      猜你喜欢
      • 2017-12-28
      • 2018-04-14
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 2019-06-23
      • 2018-09-27
      • 2018-03-04
      • 2021-10-24
      相关资源
      最近更新 更多