diff --git a/.eslintrc b/.eslintrc index 09b633ccd8..a11da84ae9 100644 --- a/.eslintrc +++ b/.eslintrc @@ -68,12 +68,12 @@ "no-this-before-super": 2, "no-var": 2, "object-shorthand": 2, - "prefer-const": 2, + "prefer-const": 0, "prefer-spread": 2, "prefer-template": 2, "array-bracket-spacing": [2, "never"], "brace-style": [2, "1tbs", { "allowSingleLine": false }], - "camel-case": 2, + "camelcase": 2, "comma-spacing": 2, "comma-style": [2, "last"], "computed-property-spacing": [2, "never"], @@ -98,7 +98,7 @@ "operator-linebreak": [2, "after"], "quote-props": [2, "as-needed", { "keywords": true }], "semi-spacing": [2, {"before": false, "after": true}], - "space-after-keyword": 2, + "space-after-keywords": 2, "space-before-blocks": 2, "space-before-function-paren": 2, "space-before-keywords": 2, @@ -109,7 +109,7 @@ "spaced-comment": [2, "always", { exceptions: ["-"]}], "padded-blocks": [2, "never"], "no-multiple-empty-lines": [2, {max: 2}], - "lines-around-comment": [2, { "beforeBlockComment": true, "beforeLineComment": true }] + "lines-around-comment": [2, { "beforeBlockComment": true, "beforeLineComment": true, "allowBlockStart": true }] }, "env": { "es6": true, diff --git a/package.json b/package.json index 4bdb699e78..480959e118 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "cookie-session": "^1.2.0", "coupon-code": "~0.3.0", "domain-middleware": "~0.1.0", + "estraverse": "^4.1.1", "express": "~4.13.3", "express-csv": "~0.6.0", "firebase": "^2.2.9", diff --git a/tasks/gulp-eslint.js b/tasks/gulp-eslint.js index cbb6c97928..7a30f35ca1 100644 --- a/tasks/gulp-eslint.js +++ b/tasks/gulp-eslint.js @@ -2,7 +2,10 @@ import gulp from 'gulp'; import eslint from 'gulp-eslint'; // TODO lint client -// TDOO separate linting cong between +// TDOO separate linting cong between +// TODO lint gulp tasks, tests, ...? +// TODO what about prefer-const rule? +// TODO remove estraverse dependency once https://github.com/adametry/gulp-eslint/issues/117 sorted out gulp.task('lint:server', () => { // Ignore .coffee files return gulp diff --git a/website/src/libs/api-v3/errors.js b/website/src/libs/api-v3/errors.js index c4afdd956c..c1ebec5d57 100644 --- a/website/src/libs/api-v3/errors.js +++ b/website/src/libs/api-v3/errors.js @@ -3,7 +3,7 @@ // Base class for custom application errors // It extends Error and capture the stack trace class CustomError extends Error { - constructor() { + constructor () { super(); Error.captureStackTrace(this, this.constructor); } @@ -12,7 +12,7 @@ class CustomError extends Error { // NotAuthorized error with a 401 http error code // used when a request is not authorized class NotAuthorized extends CustomError { - constructor(customMessage) { + constructor (customMessage) { super(); this.name = this.constructor.name; this.httpCode = 401; @@ -24,7 +24,7 @@ class NotAuthorized extends CustomError { // used for requests not formatted correctly // TODO use for validation errors too? class BadRequest extends CustomError { - constructor(customMessage) { + constructor (customMessage) { super(); this.name = this.constructor.name; this.httpCode = 400; @@ -35,7 +35,7 @@ class BadRequest extends CustomError { // InternalError error with a 500 http error code // used when an unexpected, internal server error is thrown class InternalServerError extends CustomError { - constructor(customMessage) { + constructor (customMessage) { super(); this.name = this.constructor.name; this.httpCode = 500; diff --git a/website/src/libs/api-v3/logger.js b/website/src/libs/api-v3/logger.js index 34f0bf002b..8a256a3461 100644 --- a/website/src/libs/api-v3/logger.js +++ b/website/src/libs/api-v3/logger.js @@ -5,7 +5,7 @@ let winston = require('winston'); let nconf = require('nconf'); -// TODO use const? +// TODO use const? // TODO move isProd to a single location let isProd = nconf.get('NODE_ENV') === 'production'; diff --git a/website/src/middlewares/api-v3/errorHandler.js b/website/src/middlewares/api-v3/errorHandler.js index bdbaef9043..833c03b508 100644 --- a/website/src/middlewares/api-v3/errorHandler.js +++ b/website/src/middlewares/api-v3/errorHandler.js @@ -1,21 +1,22 @@ 'use strict'; -// The error handler middleware that handles all errors +// The error handler middleware that handles all errors // and respond to the client let logger = require('../../libs/api-v3/logger'); let errors = require('../../libs/api-v3/errors'); let CustomError = errors.CustomError; let InternalServerError = errors.InternalServerError; -module.exports = function (err, req, res, next) { +module.exports = function errorHandlerMiddleware (err, req, res, next) { // Log the original error with some metadata let stack = err.stack || err.message || err; + logger.error(stack, { originalUrl: req.originalUrl, headers: req.headers, body: req.body }); - + // In case of a CustomError class, use it's data // Otherwise try to identify the type of error (mongoose validation, mongodb unique, ...) // If we can't identify it, respond with a generic 500 error diff --git a/website/src/middlewares/api-v3/index.js b/website/src/middlewares/api-v3/index.js index 0ab9de4fe4..61ac54c4dc 100644 --- a/website/src/middlewares/api-v3/index.js +++ b/website/src/middlewares/api-v3/index.js @@ -4,8 +4,7 @@ let errorHandler = require('./errorHandler'); -module.exports = function (app) { - +module.exports = function attachMiddlewares (app) { // Error handler middleware, define as the last one app.use(errorHandler); }; \ No newline at end of file