Switching to ajv validation

master
Mark Moffat 2019-11-16 09:31:57 +10:30
parent 20ad07ee74
commit 17ee5bcfc4
6 changed files with 11 additions and 17 deletions

View File

@ -1,20 +1,19 @@
const path = require('path');
const fs = require('fs');
const _ = require('lodash');
const Validator = require('jsonschema').Validator;
const v = new Validator();
const glob = require('glob');
const Ajv = require('ajv');
const ajv = new Ajv();
const addSchemas = () => {
const schemaFiles = glob.sync('./lib/**/*.json');
_.forEach(schemaFiles, (file) => {
schemaFiles.forEach((file) => {
const fileData = JSON.parse(fs.readFileSync(file, 'utf-8'));
v.addSchema(fileData, path.basename(schemaFiles[0], '.json'));
ajv.addSchema(fileData, path.basename(file, '.json'));
});
};
const validateJson = (schema, json) => {
return v.validate(json, schema);
return ajv.validate(schema, json);
};
module.exports = {

View File

@ -1,5 +1,5 @@
{
"id": "/editProduct",
"$id": "editProduct",
"type": "object",
"properties": {
"productId": {

View File

@ -1,5 +1,5 @@
{
"id": "/newProduct",
"$id": "newProduct",
"type": "object",
"properties": {
"productPermalink": {

7
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "express-cart",
"version": "1.1.13",
"version": "1.1.14",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -5888,11 +5888,6 @@
}
}
},
"jsonschema": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
"integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw=="
},
"just-debounce": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz",

View File

@ -16,6 +16,7 @@
"files": [
"./test/specs/*.js"
],
"timeout": "10s",
"verbose": true,
"environmentVariables": {
"NODE_ENV": "test"
@ -42,7 +43,6 @@
"helmet": "^3.21.2",
"html-entities": "^1.2.0",
"i18n": "^0.8.4",
"jsonschema": "^1.2.4",
"lodash": "^4.17.15",
"lunr": "^2.3.8",
"mime-type": "^3.0.7",

View File

@ -103,7 +103,7 @@ router.post('/admin/product/insert', restrict, checkAccess, async (req, res) =>
// Validate the body again schema
const schemaResult = validateJson('newProduct', doc);
if(!schemaResult.valid){
if(!schemaResult){
// If API request, return json
if(req.apiAuthenticated){
res.status(400).json(schemaResult.errors);
@ -342,7 +342,7 @@ router.post('/admin/product/update', restrict, checkAccess, async (req, res) =>
// Validate the body again schema
const schemaResult = validateJson('editProduct', productDoc);
if(!schemaResult.valid){
if(!schemaResult){
// If API request, return json
if(req.apiAuthenticated){
res.status(400).json(schemaResult.errors);