From 2047963f326333dc41fb80401f54d248d77b35a7 Mon Sep 17 00:00:00 2001 From: Tina Holly Date: Thu, 16 Apr 2020 20:50:50 -0700 Subject: [PATCH 1/3] upgrade joi to v17.1.1 --- package-lock.json | 51 +++++++++++++++++++++++++----------------- package.json | 2 +- tests/validate-test.js | 16 ++++++------- validate.js | 19 ++++++++-------- 4 files changed, 49 insertions(+), 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9429f37..3331f5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,37 +5,46 @@ "requires": true, "dependencies": { "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.0.1.tgz", + "integrity": "sha512-0oEP5UiyV4f3d6cBL8F3Z5S7iWSX39Knnl0lY8i+6gfmmIBj44JCBNtcMgwyS+5v7j3VYavNay0NFHDS+UGQcw==", + "requires": { + "@hapi/hoek": "^9.0.0" + } }, - "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + "@hapi/formula": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", + "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==" }, "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.0.4.tgz", + "integrity": "sha512-EwaJS7RjoXUZ2cXXKZZxZqieGtc7RbvQhUy8FwDoMQtxWVi14tFjeFCYPZAM1mBCpOpiBpyaZbb9NeHc7eGKgw==" }, "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz", + "integrity": "sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==", "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" + "@hapi/address": "^4.0.1", + "@hapi/formula": "^2.0.0", + "@hapi/hoek": "^9.0.0", + "@hapi/pinpoint": "^2.0.0", + "@hapi/topo": "^5.0.0" } }, + "@hapi/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==" + }, "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", + "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", "requires": { - "@hapi/hoek": "^8.3.0" + "@hapi/hoek": "^9.0.0" } }, "@tootallnate/once": { diff --git a/package.json b/package.json index 88dbd6e..9215aac 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,6 @@ "handlebars": "v4.1.2" }, "dependencies": { - "@hapi/joi": "^v15.0.3" + "@hapi/joi": "^v17.1.1" } } diff --git a/tests/validate-test.js b/tests/validate-test.js index 4fadae5..5645fdc 100644 --- a/tests/validate-test.js +++ b/tests/validate-test.js @@ -11,28 +11,28 @@ describe('validate() middleware', () => { .get('/posts') .expect(400, done) }); - + it('returns 200 for successful query validation', (done) => { request(server) .get('/posts?limit=10') .expect(200, 'ok', done) }); }); - + describe('params validation', () => { it('returns 400 for failed params validation', (done) => { request(server) .get('/contacts/tina') .expect(400, done) }); - + it('returns 200 for successful params validation', (done) => { request(server) .get('/contacts/7') .expect(200, 'ok', done) }); }); - + describe('body validation', () => { it('returns 400 for failed body validation', (done) => { request(server) @@ -40,11 +40,11 @@ describe('validate() middleware', () => { .send({ firstName: 'Tina' }) .expect(400) .end((err, res) => { - assert.equal(res.body.field, 'email'); + assert.equal(res.body.field, 'body.email'); done(); }) }); - + it('returns 200 for successful body validation', (done) => { request(server) .post('/contacts') @@ -52,10 +52,10 @@ describe('validate() middleware', () => { .expect(200, 'ok', done) }); }); - + it('skips validation if no schema provided', (done) => { request(server) .get('/health') .expect(200, 'ok', done) }); -}); \ No newline at end of file +}); diff --git a/validate.js b/validate.js index 80b8a09..b0437f5 100644 --- a/validate.js +++ b/validate.js @@ -25,16 +25,17 @@ const validate = (schema) => ( } }); - return Joi.validate(obj, schema, (err) => { - if (err) { - const message = `${err.details[0].message.replace(/"/g, "'")} at ${err.details[0].path}`; - const field = err.details[0].context.key; - res.status(400).json({ message, field }).end(); - return; - } + const joiSchema = Joi.object(schema); + const { error } = joiSchema.validate(obj); - return next(); - }); + if (error) { + const field = error.details[0].path.join('.'); + const message = error.details[0].message.replace(/"/g, "'"); + + return res.status(400).json({ message, field }).end(); + } + + return next(); } ); From b94f1743d96c646831c3329f847ef03383dddcdb Mon Sep 17 00:00:00 2001 From: Tina Holly Date: Thu, 16 Apr 2020 20:54:10 -0700 Subject: [PATCH 2/3] version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9215aac..026f803 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "express-joi-validate", - "version": "2.0.1", + "version": "2.1.0", "description": "Simple route validation middleware for Express using Joi", "main": "validate.js", "scripts": { From bc2edc98637e84f9fb34aa2165db3e8b62534a06 Mon Sep 17 00:00:00 2001 From: Tina Holly Date: Thu, 16 Apr 2020 21:08:41 -0700 Subject: [PATCH 3/3] version bump --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 3331f5c..d5337c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "express-joi-validate", - "version": "2.0.1", + "version": "2.1.0", "lockfileVersion": 1, "requires": true, "dependencies": {