【问题标题】:Node.js Express export routes for organization?用于组织的 Node.js Express 导出路由?
【发布时间】:2015-11-23 21:14:37
【问题描述】:

利用 express.Router() 对我们的应用程序进行 API 调用:

var express = require('express');
var app     = express();
var router  = express.Router();

router.useconsole.logs 在每次 API 调用之前:

router.use(function(req, res, next) { // run for any & all requests
    console.log("Connection to the API.."); // set up logging for every API call
    next(); // ..to the next routes from here..
});

我们如何将我们的路由导出到folder/routes.js 并从我们当前所在的主app.js 访问它们:

router.route('/This') // on routes for /This
    // post a new This (accessed by POST @ http://localhost:8888/api/v1/This)
    .post(function(req, res) {
        // do stuff
    });

router.route('/That') // on routes for /That
    // post a new That (accessed by POST @ http://localhost:8888/api/v1/That)
    .post(function(req, res) {
        // do stuff
    });

...当我们为每条路线添加前缀时:

app.use('/api/v1', router); // all of the API routes are prefixed with '/api' version '/v1'

【问题讨论】:

    标签: javascript node.js express routes


    【解决方案1】:

    在您的新路由模块中(例如在api/myroutes.js 中),使用module.exports = myRouter; 导出模块

    var express     = require('express');
    var router      = express.Router();
    
    router.use(function(req, res, next) { // run for any & all requests
      console.log("Connection to the API.."); // set up logging for every API call
      next(); // ..to the next routes from here..
    });
    
    router.route('/This')
      .get(function(req, res) { });
      .post(function(req, res) { });
    
    ...
    
    module.exports = myRouter;
    

    然后你可以在你的主服务器/应用文件中 require 模块:

    var express = require('express');
    var app     = express();
    
    ...
    
    var myRoutes = require('./api/myRoutes');
    
    app.use('/api', myRoutes); //register the routes
    

    【讨论】:

      【解决方案2】:

      在您的 app.js 文件中,您可以拥有以下内容:

      //api
      app.use('/', require('./api'));
      

      在文件夹api 中你可以有'index.js` 文件,你可以在其中写如下内容:

      var express = require('express');
      var router = express.Router();
      
      //API version 1
      router.use('/api/v1', require('./v1'));
      
      module.exports = router;
      

      在文件夹v1 文件index.js 中是这样的:

      var express = require('express');
      var router = express.Router();
      
      router.use('/route1', require('./route1'));
      router.use('/route2', require('./route2'));
      
      module.exports = router;
      

      文件route1.js可以有以下结构:

      var express = require('express');
      var router = express.Router();
      
      router.route('/')
          .get(getRouteHandler)
          .post(postRouteHandler);
      
      function getRouteHandler(req, res) {
          //handle GET route here
      }
      
      function postRouteHandler(req, res) {
          //handle POST route here
      }
      
      module.exports = router;
      

      route2.js 文件可以具有相同的结构。

      我觉得这对于开发node项目来说很舒服。

      【讨论】:

      • 到目前为止,这是我在start.jcolemorrison.com/… 找到的最接近的示例,但是在这种情况下,index.js 中的基本路由器和下面的路由器似乎有一个直接的层次结构。这些方法之间是否存在性能或可配置性差异?
      • 我也想知道 index.js 是如何通过简单地写require('./api')this answer 来回答我的问题的另一个问题来获得的。
      猜你喜欢
      • 2011-06-03
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 2015-01-03
      • 2013-08-27
      • 1970-01-01
      相关资源
      最近更新 更多