From 2ca55abdcc36c1e64630abdd5799292cf2f5035b Mon Sep 17 00:00:00 2001 From: Carmine DiMascio Date: Wed, 20 Mar 2019 23:34:31 -0400 Subject: [PATCH] add support for custom error transforms --- index.ts | 9 ----- package-lock.json | 2 +- package.json | 2 +- test/app.with.transform.ts | 68 ++++++++++++++++++++++++++++++++++++ test/error.transform.spec.ts | 25 +++++++++++++ test/routes.spec.ts | 4 ++- 6 files changed, 98 insertions(+), 12 deletions(-) create mode 100644 test/app.with.transform.ts create mode 100644 test/error.transform.spec.ts diff --git a/index.ts b/index.ts index 12e58f05..4e208943 100644 --- a/index.ts +++ b/index.ts @@ -130,15 +130,6 @@ OpenApiMiddleware.prototype.middleware = function() { })); const { statusCode, error } = transform(validationResult); - console.log( - '----provide to custom error handler', - errors, - status, - '-----', - error, - statusCode - ); - return res.status(statusCode).json(error); } } diff --git a/package-lock.json b/package-lock.json index 78ca9e2b..e5eeeb47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "express-middleware-openapi", - "version": "0.1.8-alpha", + "version": "0.1.10-alpha", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index fdf8a8a9..0d28acde 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "express-middleware-openapi", - "version": "0.1.8-alpha", + "version": "0.1.10-alpha", "description": "", "main": "dist/index.js", "scripts": { diff --git a/test/app.with.transform.ts b/test/app.with.transform.ts new file mode 100644 index 00000000..7c29c64c --- /dev/null +++ b/test/app.with.transform.ts @@ -0,0 +1,68 @@ +var express = require('express'); +var path = require('path'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); +var logger = require('morgan'); +const http = require('http'); +const { OpenApiMiddleware } = require('../'); + +var app = express(); + +app.use(bodyParser.json()); +app.use(logger('dev')); +app.use(express.json()); +app.use(express.urlencoded({ extended: false })); +app.use(cookieParser()); + +app.use(express.static(path.join(__dirname, 'public'))); + +new OpenApiMiddleware({ + apiSpecPath: './openapi.yaml', + validateApiDoc: true, // is the default + enableObjectCoercion: true, // should be default + errorTransform: v => { + return { + statusCode: v.status, + error: { + code: v.status, + message: v.errors[0].message, + }, + }; + }, +}).install(app); + +app.get('/v1/pets', function(req, res, next) { + console.log('at /v1/pets here'); + res.json({ + test: 'hi', + }); +}); + +app.post('/v1/pets', function(req, res, next) { + res.json({ + test: 'hi', + }); +}); + +app.get('/v1/vets/:id', function(req, res, next) { + console.log('---- get /pets/:id', req.params); + // here + res.json({ + id: req.params.id, + }); +}); + +app.get('/v1/pets/:id', function(req, res, next) { + console.log('---- get /pets/:id', req.params); + // here + res.json({ + id: req.params.id, + }); +}); + +export const server = http.createServer(app); +const port = 3001; +server.listen(port); +console.log(`Listening on port ${port}`); + +export default app; diff --git a/test/error.transform.spec.ts b/test/error.transform.spec.ts new file mode 100644 index 00000000..bced5a90 --- /dev/null +++ b/test/error.transform.spec.ts @@ -0,0 +1,25 @@ +const expect = require('chai').expect; +import * as request from 'supertest'; +import app, { server } from './app.with.transform'; +import { server as server2 } from './app'; + +describe('custom error transform', () => { + after(done => { + console.log('done', app); + server.close(); + server2.close(); + done(); + }); + + it('should transform the error output', async () => { + const id = 'my_id'; + return request(app) + .get(`/v1/pets/${id}`) + .expect(400) + .then(r => { + const e = r.body; + expect(e.code).equals(400); + expect(e.message).equals('should be integer'); + }); + }); +}); diff --git a/test/routes.spec.ts b/test/routes.spec.ts index 07b0137c..06f86c45 100644 --- a/test/routes.spec.ts +++ b/test/routes.spec.ts @@ -1,13 +1,15 @@ const expect = require('chai').expect; import * as request from 'supertest'; import app, { server } from './app'; -const { OpenApiMiddleware } = require('../'); +import { server as server2 } from './app.with.transform'; + const packageJson = require('../package.json'); describe(packageJson.name, () => { after(done => { console.log('done', app); server.close(); + server2.close(); done(); }); it(`should test something`, () => {