用于组织的 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.use
console.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 导出路由?的主要内容,如果未能解决你的问题,请参考以下文章