导出模块

时间:2016-01-23 14:50:16

标签: node.js code-complexity

我正在为模块导出一个函数,以便我可以将变量传递给模块。但是我们的代码分析器报告函数太长了。

通常我这样做是为了将我的快速应用程序和一些配置传递到一个定义一些路由的文件中。我通常为每个资源都有不同的路径文件,只是给出了一些分离:

routes/authors.js
routes/books.js
...
etc

Inside authors.js:

module.exports = function(app, configuration) {

  app.post('/authors', ...


  app.get('/authors', ...


  app.get('/authors/:id', ...

}

这很好用,但最终我的功能很长。由于该功能由每条路线的许多相同功能组成,因此不是很大。但静态代码分析会抱怨函数长度。

当然也许这应该被忽略。但我也想确保这不是让代码变得更好的好机会,因为可能(只是可能)代码分析器是正确的。

有没有更好的方法来导出模块中的函数并避免真正的长函数?并且通过“更好”我正在寻找可能是我没有遵循的标准或约定的东西,如果我已经遵循nodejs / express约定,我不想更改代码。

1 个答案:

答案 0 :(得分:1)

我一直在做的方法是将路由方法放在一个单独的控制器文件中。

authors.controller.js示例:

module.exports = {
    getAuthorsById: function(req, res, next) {
        res.render('authors');
    },
    getAuthors: function(req, res, next) {
    },
    // Now if for some reason I need to configuration object passed into
    // the controller method I can simply return a function.
    postAuthor: function(conf) {
        return function(req, res, next) {
            if(conf.x) {
                res.render(conf.y);
            }
        }
    }
}

示例authors.routes.js:

var ctrl = require('./authors.controller.js');

module.exports = function(app, conf) {
    app.get('/authors/:id', ctrl.getAuthorsById);
    app.get('/authors', ctrl.getAuthors);
    // And then pass in the configuration object when needed.
    app.post('/authors', ctrl.postAuthor(conf));
}();

这样路由定义的功能本身并不大,尽管控制器文件仍然很大。