{"id":18349,"library":"express-openapi-validate","title":"express-openapi-validate","description":"Express middleware for validating request bodies, query parameters, path parameters, and headers against an OpenAPI 3.0 document. Uses Ajv v8 for JSON Schema draft-04/05 validation as required by OpenAPI 3. Supports automatic request matching via validator.match(), optional allowNoMatch for missing routes, and custom Ajv options. Current stable version 0.6.1, released 2022, with infrequent releases. Key differentiator: simple integration with Express, TypeScript types included, support for discriminator keywords and extra OAS keywords. Alternative: express-openapi-validator.","status":"maintenance","version":"0.6.1","language":"javascript","source_language":"en","source_url":"ssh://git@github.com/Hilzu/express-openapi-validate","tags":["javascript","openapi","openapi3","swagger","express","middleware","validation","typescript"],"install":[{"cmd":"npm install express-openapi-validate","lang":"bash","label":"npm"},{"cmd":"yarn add express-openapi-validate","lang":"bash","label":"yarn"},{"cmd":"pnpm add express-openapi-validate","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Used internally for JSON Schema validation. v8 used since v0.6.0, breaking changes from v6.","package":"ajv","optional":false},{"reason":"Often used to parse OpenAPI YAML documents, though not a direct dependency of this package.","package":"js-yaml","optional":true}],"imports":[{"note":"Default import not supported; must use named import. CommonJS require works with { OpenApiValidator } destructuring.","wrong":"const OpenApiValidator = require('express-openapi-validate')","symbol":"OpenApiValidator","correct":"import { OpenApiValidator } from 'express-openapi-validate'"},{"note":"OpenApiDocument is a TypeScript type, only import as type to avoid runtime errors.","wrong":"import { OpenApiDocument } from 'express-openapi-validate'","symbol":"OpenApiDocument","correct":"import type { OpenApiDocument } from 'express-openapi-validate'"},{"note":"validator.validate returns middleware, not invoked directly.","wrong":"validator.validate('post','/path')(req,res)","symbol":"validator.validate","correct":"import { OpenApiValidator } from 'express-openapi-validate';\nconst validator = new OpenApiValidator(doc);\nrouter.post('/path', validator.validate('post', '/path'))"}],"quickstart":{"code":"const fs = require('fs');\nconst express = require('express');\nconst { OpenApiValidator } = require('express-openapi-validate');\nconst YAML = require('js-yaml');\n\nconst app = express();\napp.use(express.json());\n\nconst apiDoc = YAML.load(fs.readFileSync('./openapi.yaml', 'utf8'));\nconst validator = new OpenApiValidator(apiDoc, {\n  ajvOptions: { coerceTypes: true },\n});\n\napp.post('/echo', validator.validate('post', '/echo'), (req, res) => {\n  res.json({ output: req.body.input });\n});\n\napp.use((err, req, res, next) => {\n  res.status(err.statusCode || 500).json({ error: err.message });\n});\n\napp.listen(3000);","lang":"javascript","description":"Express server with OpenAPI validation using validator.validate() and custom Ajv options."},"warnings":[{"fix":"Review Ajv v8 migration guide (https://ajv.js.org/v6-to-v8-migration.html) for changes in options like $data, formats, keywords.","message":"Ajv upgrade from v6 to v8 in v0.6.0: custom Ajv options may require changes per Ajv migration guide.","severity":"breaking","affected_versions":">=0.6.0"},{"fix":"Pass allowNoMatch option: app.use(validator.match({ allowNoMatch: true }))","message":"validator.match() throws error if no matching route spec found in v0.6.0. Use match({ allowNoMatch: true }) for old behavior.","severity":"breaking","affected_versions":">=0.6.0"},{"fix":"Upgrade Node.js to v12 or higher.","message":"Node 10 support dropped in v0.6.0.","severity":"breaking","affected_versions":">=0.6.0"},{"fix":"Ensure schemas conform to draft-04/05; avoid draft-07-only features like if/then/else.","message":"JSON Schema draft-04/05 used since v0.4.0 instead of draft-07. Some valid draft-07 schemas may fail.","severity":"breaking","affected_versions":">=0.4.0"},{"fix":"Upgrade Node.js to v10 or higher (v12+ recommended).","message":"Node 6 and 8 support dropped in v0.5.0.","severity":"deprecated","affected_versions":">=0.5.0"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"Ensure the document is an object (already parsed from JSON/YAML). If using JSON.parse/require, it's already an object.","cause":"Passing a JavaScript object instead of a JSON string to OpenApiValidator constructor.","error":"SyntaxError: Unexpected token in JSON at position 0"},{"fix":"Use: import { OpenApiValidator } from 'express-openapi-validate'","cause":"Using default import instead of named import.","error":"TypeError: Cannot destructure property 'OpenApiValidator' of ... undefined"},{"fix":"Either add the operation to your OpenAPI document or use: validator.match({ allowNoMatch: true })","cause":"Validator.match() cannot find a matching route specification. Throw occurs if allowNoMatch is not set.","error":"Error: No matching operation for POST /unknown"},{"fix":"Ensure request body includes all required properties as defined in the OpenAPI schema.","cause":"Request body does not match schema defined in OpenAPI document.","error":"ValidationError: request.body should have required property 'input'"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}