• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

FieldDB / AuthenticationWebService / 20079488455

09 Dec 2025 09:44PM UTC coverage: 44.741% (-29.5%) from 74.284%
20079488455

Pull #133

github

web-flow
Merge 0879ec3ce into 8d2388c3d
Pull Request #133: Update nano

282 of 716 branches covered (39.39%)

Branch coverage included in aggregate %.

2 of 3 new or added lines in 1 file covered. (66.67%)

422 existing lines in 5 files now uncovered.

641 of 1347 relevant lines covered (47.59%)

3.88 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

63.06
/middleware/error-handler.js
1
const debug = require('debug')('middleware:error');
1✔
2

3
const { BUNYAN_LOG_LEVEL } = process.env;
1✔
4

5
function cleanErrorStatus(status) {
6
  if (status && status < 600) {
69✔
7
    return status;
12✔
8
  }
9
  return '';
57✔
10
}
11

12
// eslint-disable-next-line no-unused-vars
13
function errorHandler(err, req, res, next) {
14
  let data;
15
  const { NODE_ENV } = process.env;
69✔
16
  debug(`errorHandler ${NODE_ENV} ${req.url}`, err);
69✔
17

18
  if (res.headersSent) {
69!
19
    // eslint-disable-next-line no-console
20
    console.warn('This request has already been replied to', err);
×
21
    return;
×
22
  }
23

24
  if (['development', 'test', 'local'].indexOf(NODE_ENV) > -1) {
69✔
25
    // expose stack traces
26
    data = {
67✔
27
      message: err.message,
28
      stack: err.stack,
29
      url: err.url,
30
      details: err.details,
31
      userFriendlyErrors: err.userFriendlyErrors,
32
    };
33
    if (data.details && data.details.url) {
67!
34
      delete data.details.url;
×
35
    }
36
  } else {
37
    // production error handler
38
    debug('using production error handler', NODE_ENV);
2✔
39
    data = {
2✔
40
      message: err.message,
41
    };
42
  }
43
  data.status = cleanErrorStatus(err.statusCode || err.status) || 500;
69✔
44

45
  if (err.code === 'ECONNREFUSED') {
69!
46
    data.userFriendlyErrors = ['Server erred, please report this 6339'];
×
47
  } else if (err.name === 'unauthorized_request') {
69!
48
    data.status = 401;
×
49
    data.userFriendlyErrors = err.userFriendlyErrors || [data.message];
×
50
  } else if (err.code === 'ETIMEDOUT') {
69!
51
    data.status = 500;
×
52
    data.userFriendlyErrors = ['Server timed out, please try again later'];
×
53
  } else if (data.status === 502) {
69!
54
    data.userFriendlyErrors = ['Server erred, please report this 36339'];
×
55
  } else if (data.status === 401) {
69!
UNCOV
56
    data.userFriendlyErrors = err.userFriendlyErrors || ['Server erred, please report this 7234'];
×
57
  } else if (data.status === 404) {
69✔
58
    data.userFriendlyErrors = err.userFriendlyErrors || [data.message];
1✔
59
  } else if (data.status === 403) {
68!
60
    data.userFriendlyErrors = err.userFriendlyErrors || [data.message];
×
61
  } else if (data.status === 406) {
68✔
62
    data.userFriendlyErrors = err.userFriendlyErrors || [data.message];
4✔
63
  } else if (data.status === 409) {
64!
UNCOV
64
    data.userFriendlyErrors = err.userFriendlyErrors || [data.message];
×
65
  } else if (data.status === 412) {
64✔
66
    data.userFriendlyErrors = err.userFriendlyErrors || [data.message];
5✔
67
  } else if (err.message === 'Code is not authorized') {
59!
68
    data.status = 403;
×
69
    data.userFriendlyErrors = err.userFriendlyErrors || [data.message];
×
70
  } else if (err.message === 'Missing parameter: `state`') {
59!
71
    data.userFriendlyErrors = err.userFriendlyErrors || [data.message];
×
72
  } else if (err.message === 'Client id or Client Secret is invalid') {
59!
73
    data.status = 403;
×
74
    data.userFriendlyErrors = err.userFriendlyErrors || [data.message];
×
75
  } else if (err.code === 'ENOTFOUND' && err.syscall === 'getaddrinfo') {
59!
76
    data.status = 500;
×
77
    data.userFriendlyErrors = ['Server connection timed out, please try again later'];
×
78
  } else if (err.code === 'EPROTO') {
59!
79
    data.userFriendlyErrors = ['Server erred, please report this 9234'];
×
80
  } else if (err.code === 'DEPTH_ZERO_SELF_SIGNED_CERT') {
59!
81
    // see also https://github.com/request/request/issues/418
82
    data.userFriendlyErrors = ['Server erred, please report this 23829'];
×
83
  } else if (err.status && err.userFriendlyErrors && err.userFriendlyErrors[0] && err.userFriendlyErrors[0].includes('Please report this')) {
59!
84
    data.userFriendlyErrors = err.userFriendlyErrors;
×
85
  } else if (err.userFriendlyErrors) {
59✔
86
    data.userFriendlyErrors = err.userFriendlyErrors;
4✔
87
  } else {
88
    data.userFriendlyErrors = ['Server erred, please report this 816'];
55✔
89
  }
90

91
  res.status(data.status);
69✔
92

93
  if (data.status >= 500) {
69✔
94
    // data.stack = data.stack ? data.stack.toString() : undefined;
95
    data.message = 'Internal server error';
59✔
96
    if (BUNYAN_LOG_LEVEL !== 'FATAL') {
59!
97
      req.log.error(err, `${new Date()} There was an unexpected error ${process.env.NODE_ENV} ${req.url}`);
×
98
    }
99
  } else {
100
    data.message = err.message;
10✔
101
  }
102
  // eslint-disable-next-line no-param-reassign
103
  req.log.fields.err = {
69✔
104
    stack: err.stack, message: err.message,
105
  };
106

107
  if (req.headers['x-requested-with'] === 'XMLHttpRequest' || /application\/json/.test(req.headers['content-type'])) {
69✔
108
    res.json(data);
68✔
109
    return;
68✔
110
  }
111

112
  res.json({
1✔
113
    status: data.status,
114
    userFriendlyErrors: data.userFriendlyErrors,
115
  });
116
}
117

118
exports.errorHandler = errorHandler;
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc