Node.js Express如何为组织导出路由?

5

使用express.Router()处理与应用程序的API调用:

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

router.use 在每次 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'
2个回答

12
在你的新路由模块中(例如在 api/myroutes.js 文件中),导出该模块。

在你的新路由模块中(例如在 api/myroutes.js 文件中),导出该模块。

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

router.use(function(req, res, next) {
  console.log('Connection to the API..');
  next();
});

router.route('/example')
  .get(function(req, res) { });
  .post(function(req, res) { });


module.exports = router;

那么你可以在主服务器/应用程序文件中要求该模块:

var express = require('express');
var app     = express();


var myRoutes = require('./api/myRoutes');

app.use('/api', myRoutes); //register the routes

1
应该是 module.exports = router; 而不是 module.exports = myRouter; - 76484
1
@76484 是的,我已经纠正了它并清理了一些东西。抱歉 - 我很久以前发布了这个。 - Tony Barnes

3
在你的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;
< p>route2.js文件可以有相同的结构。

我认为这对于开发Node项目非常舒适。


到目前为止,这是我找到的最接近此处示例的例子:http://start.jcolemorrison.com/quick-tip-organizing-routes-in-large-express-4-x-apps/。然而,在这种情况下,index.js中的基本路由器和下面的路由器之间似乎存在直接层次结构。这些方法之间是否存在性能或可配置性差异? - jpierson
我也在想如何通过简单地写require('./api')来捕获index.js,但这个答案解决了我的问题。 - jpierson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接