用于组织的 Node.js Express 导出路由?

Posted

技术标签:

【中文标题】用于组织的 Node.js Express 导出路由?【英文标题】:Node.js Express export routes for organization? 【发布时间】: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'

【问题讨论】:

【参考方案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 来回答我的问题的另一个问题来获得的。

以上是关于用于组织的 Node.js Express 导出路由?的主要内容,如果未能解决你的问题,请参考以下文章

Node.js - 如何导出对象和函数

MEAN 项目 - 组织

什么将导出JavaScript / Node.JS文件?

jQuery 函数不适用于 node.js 中的 express.js 路由

建议收藏:不容错过的 Node.js 项目架构

在 Node.js 中组织路由