Emapic/emapic

View on GitHub
server.js

Summary

Maintainability
F
6 days
Test Coverage

Function EmapicApp has 401 lines of code (exceeds 25 allowed). Consider refactoring.
Open

var EmapicApp = function() {

    //  Scope.
    var self = this,
        serverConfig,
Severity: Major
Found in server.js - About 2 days to fix

    Function initializeServer has 221 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

        self.initializeServer = function() {
    
            self.app = express();
    
            utils(self.app);
    Severity: Major
    Found in server.js - About 1 day to fix

      Function EmapicApp has a Cognitive Complexity of 54 (exceeds 5 allowed). Consider refactoring.
      Open

      var EmapicApp = function() {
      
          //  Scope.
          var self = this,
              serverConfig,
      Severity: Minor
      Found in server.js - About 1 day to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      File server.js has 440 lines of code (exceeds 250 allowed). Consider refactoring.
      Open

      require('exit-on-epipe');
      
      var express = require('express'),
          session = require('express-session'),
          FileStore = require('session-file-store')(session),
      Severity: Minor
      Found in server.js - About 6 hrs to fix

        Function loadSitemapRobots has 101 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

            self.loadSitemapRobots = function() {
                var sitemap = Sitemap({
                    url: serverConfig.domain,
                    http: 'https',
                    hideByRegex: false,
        Severity: Major
        Found in server.js - About 4 hrs to fix

          Function has too many statements (38). Maximum allowed is 30.
          Open

              self.initializeServer = function() {
          Severity: Minor
          Found in server.js by eslint

          enforce a maximum number of statements allowed in function blocks (max-statements)

          The max-statements rule allows you to specify the maximum number of statements allowed in a function.

          function foo() {
            var bar = 1; // one statement
            var baz = 2; // two statements
            var qux = 3; // three statements
          }

          Rule Details

          This rule enforces a maximum number of statements allowed in function blocks.

          Options

          This rule has a number or object option:

          • "max" (default 10) enforces a maximum number of statements allows in function blocks

          Deprecated: The object property maximum is deprecated; please use the object property max instead.

          This rule has an object option:

          • "ignoreTopLevelFunctions": true ignores top-level functions

          max

          Examples of incorrect code for this rule with the default { "max": 10 } option:

          /*eslint max-statements: ["error", 10]*/
          /*eslint-env es6*/
          
          function foo() {
            var foo1 = 1;
            var foo2 = 2;
            var foo3 = 3;
            var foo4 = 4;
            var foo5 = 5;
            var foo6 = 6;
            var foo7 = 7;
            var foo8 = 8;
            var foo9 = 9;
            var foo10 = 10;
          
            var foo11 = 11; // Too many.
          }
          
          let foo = () => {
            var foo1 = 1;
            var foo2 = 2;
            var foo3 = 3;
            var foo4 = 4;
            var foo5 = 5;
            var foo6 = 6;
            var foo7 = 7;
            var foo8 = 8;
            var foo9 = 9;
            var foo10 = 10;
          
            var foo11 = 11; // Too many.
          };

          Examples of correct code for this rule with the default { "max": 10 } option:

          /*eslint max-statements: ["error", 10]*/
          /*eslint-env es6*/
          
          function foo() {
            var foo1 = 1;
            var foo2 = 2;
            var foo3 = 3;
            var foo4 = 4;
            var foo5 = 5;
            var foo6 = 6;
            var foo7 = 7;
            var foo8 = 8;
            var foo9 = 9;
            var foo10 = 10;
            return function () {
          
              // The number of statements in the inner function does not count toward the
              // statement maximum.
          
              return 42;
            };
          }
          
          let foo = () => {
            var foo1 = 1;
            var foo2 = 2;
            var foo3 = 3;
            var foo4 = 4;
            var foo5 = 5;
            var foo6 = 6;
            var foo7 = 7;
            var foo8 = 8;
            var foo9 = 9;
            var foo10 = 10;
            return function () {
          
              // The number of statements in the inner function does not count toward the
              // statement maximum.
          
              return 42;
            };
          }

          ignoreTopLevelFunctions

          Examples of additional correct code for this rule with the { "max": 10 }, { "ignoreTopLevelFunctions": true } options:

          /*eslint max-statements: ["error", 10, { "ignoreTopLevelFunctions": true }]*/
          
          function foo() {
            var foo1 = 1;
            var foo2 = 2;
            var foo3 = 3;
            var foo4 = 4;
            var foo5 = 5;
            var foo6 = 6;
            var foo7 = 7;
            var foo8 = 8;
            var foo9 = 9;
            var foo10 = 10;
            var foo11 = 11;
          }

          Related Rules

          • [complexity](complexity.md)
          • [max-depth](max-depth.md)
          • [max-len](max-len.md)
          • [max-nested-callbacks](max-nested-callbacks.md)
          • [max-params](max-params.md) Source: http://eslint.org/docs/rules/

          Function start has 32 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

              self.start = function() {
                  var options = {};
                  options.key = serverConfig.ssl.key ? fs.readFileSync(serverConfig.ssl.key) : fs.readFileSync('./test-key.pem');
                  options.cert = serverConfig.ssl.cert ? fs.readFileSync(serverConfig.ssl.cert) : fs.readFileSync('./test-cert.pem');
                  if (serverConfig.ssl.ca) {
          Severity: Minor
          Found in server.js - About 1 hr to fix

            Expected error to be handled.
            Open

                            '404': function err404(err, req, res) {
            Severity: Minor
            Found in server.js by eslint

            Enforce Callback Error Handling (handle-callback-err)

            In Node.js, a common pattern for dealing with asynchronous behavior is called the callback pattern. This pattern expects an Error object or null as the first argument of the callback. Forgetting to handle these errors can lead to some really strange behavior in your application.

            function loadData (err, data) {
                doSomething(); // forgot to handle error
            }

            Rule Details

            This rule expects that when you're using the callback pattern in Node.js you'll handle the error.

            Options

            The rule takes a single string option: the name of the error parameter. The default is "err".

            Examples of incorrect code for this rule with the default "err" parameter name:

            /*eslint handle-callback-err: "error"*/
            
            function loadData (err, data) {
                doSomething();
            }

            Examples of correct code for this rule with the default "err" parameter name:

            /*eslint handle-callback-err: "error"*/
            
            function loadData (err, data) {
                if (err) {
                    console.log(err.stack);
                }
                doSomething();
            }
            
            function generateError (err) {
                if (err) {}
            }

            Examples of correct code for this rule with a sample "error" parameter name:

            /*eslint handle-callback-err: ["error", "error"]*/
            
            function loadData (error, data) {
                if (error) {
                   console.log(error.stack);
                }
                doSomething();
            }

            regular expression

            Sometimes (especially in big projects) the name of the error variable is not consistent across the project, so you need a more flexible configuration to ensure that the rule reports all unhandled errors.

            If the configured name of the error variable begins with a ^ it is considered to be a regexp pattern.

            • If the option is "^(err|error|anySpecificError)$", the rule reports unhandled errors where the parameter name can be err, error or anySpecificError.
            • If the option is "^.+Error$", the rule reports unhandled errors where the parameter name ends with Error (for example, connectionError or validationError will match).
            • If the option is "^.*(e|E)rr", the rule reports unhandled errors where the parameter name matches any string that contains err or Err (for example, err, error, anyError, some_err will match).

            When Not To Use It

            There are cases where it may be safe for your application to ignore errors, however only ignore errors if you are confident that some other form of monitoring will help you catch the problem.

            Further Reading

            Unexpected require().
            Open

                    require('./routes')(self.app);
            Severity: Minor
            Found in server.js by eslint

            Enforce require() on the top-level module scope (global-require)

            In Node.js, module dependencies are included using the require() function, such as:

            var fs = require("fs");

            While require() may be called anywhere in code, some style guides prescribe that it should be called only in the top level of a module to make it easier to identify dependencies. For instance, it's arguably harder to identify dependencies when they are deeply nested inside of functions and other statements:

            function foo() {
            
                if (condition) {
                    var fs = require("fs");
                }
            }

            Since require() does a synchronous load, it can cause performance problems when used in other locations.

            Further, ES6 modules mandate that import and export statements can only occur in the top level of the module's body.

            Rule Details

            This rule requires all calls to require() to be at the top level of the module, similar to ES6 import and export statements, which also can occur only at the top level.

            Examples of incorrect code for this rule:

            /*eslint global-require: "error"*/
            /*eslint-env es6*/
            
            // calling require() inside of a function is not allowed
            function readFile(filename, callback) {
                var fs = require('fs');
                fs.readFile(filename, callback)
            }
            
            // conditional requires like this are also not allowed
            if (DEBUG) { require('debug'); }
            
            // a require() in a switch statement is also flagged
            switch(x) { case '1': require('1'); break; }
            
            // you may not require() inside an arrow function body
            var getModule = (name) => require(name);
            
            // you may not require() inside of a function body as well
            function getModule(name) { return require(name); }
            
            // you may not require() inside of a try/catch block
            try {
                require(unsafeModule);
            } catch(e) {
                console.log(e);
            }

            Examples of correct code for this rule:

            /*eslint global-require: "error"*/
            
            // all these variations of require() are ok
            require('x');
            var y = require('y');
            var z;
            z = require('z').initialize();
            
            // requiring a module and using it in a function is ok
            var fs = require('fs');
            function readFile(filename, callback) {
                fs.readFile(filename, callback)
            }
            
            // you can use a ternary to determine which module to require
            var logger = DEBUG ? require('dev-logger') : require('logger');
            
            // if you want you can require() at the end of your module
            function doSomethingA() {}
            function doSomethingB() {}
            var x = require("x"),
                z = require("z");

            When Not To Use It

            If you have a module that must be initialized with information that comes from the file-system or if a module is only used in very rare situations and will cause significant overhead to load it may make sense to disable the rule. If you need to require() an optional dependency inside of a try/catch, you can disable this rule for just that dependency using the // eslint-disable-line global-require comment. Source: http://eslint.org/docs/rules/

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                                    for (var i = 0, iLen = goodFiles.length; i<iLen; i++) {
                                        goodOnes.push('"' + goodFiles[i] + '" ("' + originalFilenames[goodFiles[i]] + '")');
                                    }
            Severity: Major
            Found in server.js and 1 other location - About 1 hr to fix
            server.js on lines 454..456

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 71.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                                    for (var j = 0, jLen = badFiles.length; j<jLen; j++) {
                                        badOnes.push('"' + badFiles[j] + '" ("' + originalFilenames[badFiles[j]] + '")');
                                    }
            Severity: Major
            Found in server.js and 1 other location - About 1 hr to fix
            server.js on lines 439..441

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 71.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                            if (req.session.error) {
                                res.locals.error = req.i18n.__(req.session.error);
                                delete req.session.error;
                            }
            Severity: Major
            Found in server.js and 1 other location - About 1 hr to fix
            server.js on lines 474..477

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 63.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                            if (req.session.success) {
                                res.locals.success = req.i18n.__(req.session.success);
                                delete req.session.success;
                            }
            Severity: Major
            Found in server.js and 1 other location - About 1 hr to fix
            server.js on lines 478..481

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 63.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                    options.key = serverConfig.ssl.key ? fs.readFileSync(serverConfig.ssl.key) : fs.readFileSync('./test-key.pem');
            Severity: Minor
            Found in server.js and 1 other location - About 40 mins to fix
            server.js on lines 538..538

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 49.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                    options.cert = serverConfig.ssl.cert ? fs.readFileSync(serverConfig.ssl.cert) : fs.readFileSync('./test-cert.pem');
            Severity: Minor
            Found in server.js and 1 other location - About 40 mins to fix
            server.js on lines 537..537

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 49.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                self.loadConfig = function() {
                    serverConfig = nconf.get('server');
                    socialConfig = nconf.get('social');
                    geoConfig = nconf.get('geoServices');
                };
            Severity: Minor
            Found in server.js and 1 other location - About 40 mins to fix
            models/survey.js on lines 132..136

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 48.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            There are no issues that match your filters.

            Category
            Status