-
-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy patherrors.js
More file actions
96 lines (89 loc) · 2.58 KB
/
Copy patherrors.js
File metadata and controls
96 lines (89 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
* @desc Function to parse error message
* @param {Object} err
* @return {String} message
*/
const getUniqueMessage = (err) => {
let output;
try {
let begin = 0;
if (err.errmsg.lastIndexOf('.$') !== -1) {
// support mongodb <= 3.0 (default: MMapv1 engine)
// "errmsg" : "E11000 duplicate key error index: mean-dev.users.$email_1 dup key: { : \"test@user.com\" }"
begin = err.errmsg.lastIndexOf('.$') + 2;
} else {
// support mongodb >= 3.2 (default: WiredTiger engine)
// "errmsg" : "E11000 duplicate key error collection: mean-dev.users index: email_1 dup key: { : \"test@user.com\" }"
begin = err.errmsg.lastIndexOf('index: ') + 7;
}
const fieldName = err.errmsg.substring(begin, err.errmsg.lastIndexOf('_1'));
output = `${fieldName.charAt(0).toUpperCase() + fieldName.slice(1)} already exists`;
} catch (_err) {
output = 'Unique field already exists';
}
return output;
};
/**
* @desc Function to get error message from specific code
* @param {Object} err
* @return {String} message
*/
const getMessageFromCode = (err) => {
let output;
switch (err.code) {
case 11001:
output = getUniqueMessage(err);
break;
case 11000:
output = getUniqueMessage(err);
break;
default: {
if (err.message) output = err.message;
else output = 'Something went wrong.';
}
}
return output;
};
/**
* @desc Function to map an array/object of errors
* @param {Object} err
* @return {String} message
*/
const getMessageFromErrors = (err) => {
let output = '';
if (err.errors instanceof Array) {
err.errors.forEach((error) => {
if (error.message) {
output += `${error.message} `;
}
});
} else if (err.errors instanceof Object) {
Object.keys(err.errors).forEach((key) => {
if (err.errors[key].message) {
output += `${err.errors[key].message} `;
}
});
}
return output;
};
const cleanMessage = (message) => {
if (!message || typeof message !== 'string' || !message.trim()) return 'Something went wrong.';
if (message[message.length - 1] !== '.') return `${message}.`;
return message;
};
/**
* @desc Function to route error to specific actio in order to get clean result for api
* @param {Object} err
* @return {String} message
*/
const getMessage = (err) => {
let output = '';
if (err.code) output = getMessageFromCode(err);
else if (err.errors) output = getMessageFromErrors(err);
else if (err.message) output = err.message;
else output = 'Something went wrong.';
return cleanMessage(output);
};
export default {
getMessage,
};