【问题标题】:How to efficiently separate routing code如何高效分离路由代码
【发布时间】:2014-12-24 07:20:18
【问题描述】:

哑/新手问题...

我正在学习/使用 Node / Express4 中的 API,我想将我的路由分解到另一个模块中。我让它使用以下代码,但对我来说继续重复使用 require('express') 语句似乎很尴尬......有没有办法从将 routes.js 文件放入 server.js 中,并且仍然将我的 .get 和 .post 语句保留在 routes 模块中?提前致谢!

server.js:

'use strict';
var express = require('express');
var routes = require('./routes');

var app = express();

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

app.listen(3000, function() {
    console.log('Listening);
});

routes.js

var express = require('express'); // how do I get rid of this line?
var router = express.Router(); // can I move this to server.js?

var apiRoute = router.route('');

apiRoute.get(function (req, res) {
    res.send('api GET request received');
});

module.exports = router; 

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    你在正确的轨道上。每次需要时重用var express = require('express'); 语句实际上很酷。导入(需要)模块是模块化开发的基石,允许您在项目文件中保持关注点分离。

    就模块化添加路由而言:问题在于routes.js 具有误导性。

    为了模块化地分离你的路线,你应该使用几个名为<yourResource>.js的模块。这些模块将包含所有路由代码以及任何其他配置或必要的功能。然后你可以将它们附加到 app.js 中:

    var apiRoute = router.route('/api');
    apiRoute.use('/<yourResource', yourResourceRouter);
    

    例如,如果你有一个资源bikes

    app.js 甚至是一个模块api.js

    var apiRoute = router.route('/api')
      , bikeRoutes = require('./bikes');
    apiRoute.use('/bikes', bikeRoutes);
    

    然后在bike.js中:

    var express = require('express');
    var router = express.Router(); 
    
    var bikeRoutes = router.route('/');
    
    bikeRoutes.get(function (req, res) {
        res.send('api GET request received');
    });
    
    module.exports = bikeRoutes; 
    

    从那里很容易看出,您可以构建许多不同的资源并不断嵌套它们。

    【讨论】:

    • 谢谢...我确实打算使用以每个资源/模型命名的单独模块...但我担心所有重复的 require/import 语句都会对服务器内存和性能产生负面影响.再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2020-07-23
    相关资源
    最近更新 更多