UNPKG

2.96 kBJavaScriptView Raw
1var Ajv = require('ajv');
2var ajv = new Ajv({ v5: true, $data: true, allErrors: true, jsonPointers: true });
3// Ajv options allErrors and jsonPointers are required
4require('ajv-keywords')(ajv /*, {singleError: true} */);
5require('ajv-errors')(ajv);
6const coreUtils = require('../CoreUtils');
7const sendResponse = require('../exception/SendResponse');
8
9validateRequest = (schema,dto) => {
10 const log = require('../index').Logger;
11 var validate = ajv.compile(schema);
12 var valid = validate(dto);
13 if (!valid) {
14 // log.error('dto validation failed');
15 let validationResponse = validate.errors; // processed errors
16 log.error('raw dto errors:: ' + JSON.stringify(validationResponse));
17 let customErrorResponse= createErrorResponse(validationResponse);
18 return sendResponse.validationException(customErrorResponse);
19 } else {
20 log.debug('dto validation passed');
21 return null;
22 }
23}
24
25createErrorResponse = (validationResponse) => {
26 var errors = [];
27 var error;
28 //console.info('createErrorResponse:' + JSON.stringify(validationResponse));
29 validationResponse.forEach(function (errorRow) {
30 if (errorRow.dataPath) {
31 if (errorRow.keyword === 'required') {
32 let property = errorRow.params.missingProperty
33 error = {
34 "message": "Key_" + coreUtils.convertUCfirst(property) + "CannotBeBlank",
35 "field": errorRow.dataPath + "/"+ property
36 }
37 } else {
38 error = {
39 "message": errorRow.message,
40 "field": errorRow.dataPath.slice(1)
41 }
42 }
43
44 errors.push(error);
45 } else {
46 let internalErrorRow = errorRow;
47 if (internalErrorRow.keyword === 'dependencies') {
48 let firstProperty = internalErrorRow.params.property
49 let secondProperty = internalErrorRow.params.missingProperty
50 error = {
51 "message": "Key_" + coreUtils.convertUCfirst(firstProperty) +
52 "And" + coreUtils.convertUCfirst(secondProperty) + "NotToBeEmpty",
53 "field": firstProperty + "," + secondProperty
54 }
55
56 }
57 if (internalErrorRow.keyword === 'required') {
58 let property = internalErrorRow.params.missingProperty
59 error = {
60 "message": "Key_" + coreUtils.convertUCfirst(property) + "CannotBeBlank",
61 "field": property
62 }
63 }
64 if (internalErrorRow.keyword === 'additionalProperties') {
65 let property = internalErrorRow.params.additionalProperty
66 error = {
67 "message": "Key_" + coreUtils.convertUCfirst(property) + "isNotRequired",
68 "field": property
69 }
70 }
71 errors.push(error);
72 }
73 });
74 return errors;
75 }
76module.exports = {
77 validateRequest
78 }
\No newline at end of file