{"id":18533481,"url":"https://github.com/mattiamalonni/express-joi-validations","last_synced_at":"2025-04-09T15:31:20.187Z","repository":{"id":237884666,"uuid":"795415267","full_name":"mattiamalonni/express-joi-validations","owner":"mattiamalonni","description":"Express middleware to validate request (headers, params, query, body) using Joi","archived":false,"fork":false,"pushed_at":"2024-05-13T07:25:55.000Z","size":135,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-28T12:38:59.973Z","etag":null,"topics":["data-validation","express","express-middleware","input-validation","joi","joi-validation","middleware","request-validation","schema-validation","validation-middleware"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/express-joi-validations","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mattiamalonni.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-03T08:27:26.000Z","updated_at":"2025-01-07T11:08:35.000Z","dependencies_parsed_at":"2024-05-03T13:32:54.184Z","dependency_job_id":"3e44f2ac-a00f-4dfd-b075-09b3830d6108","html_url":"https://github.com/mattiamalonni/express-joi-validations","commit_stats":null,"previous_names":["mattiamalonni/express-joi-validations"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattiamalonni%2Fexpress-joi-validations","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattiamalonni%2Fexpress-joi-validations/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattiamalonni%2Fexpress-joi-validations/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattiamalonni%2Fexpress-joi-validations/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mattiamalonni","download_url":"https://codeload.github.com/mattiamalonni/express-joi-validations/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248057937,"owners_count":21040664,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-validation","express","express-middleware","input-validation","joi","joi-validation","middleware","request-validation","schema-validation","validation-middleware"],"created_at":"2024-11-06T19:11:47.910Z","updated_at":"2025-04-09T15:31:19.933Z","avatar_url":"https://github.com/mattiamalonni.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# express-joi-validations\n\nExpress middleware to validate request (headers, params, query, body) using Joi\n\n## Installation\n\n```bash\nnpm i express-joi-validations\n```\n\n## Usage\n\n### Out of the box\n\n```typescript\nimport validate from 'express-joi-validations';\n\n// PUT /posts/507f1f77bcf86cd799439011\n// HEADERS: { Authorization: \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\" }\n// BODY: { title: \"Lorem ipsum\", content: \"Lorem ipsum dolor sit amet\" }\n\nrouter.put('/posts/:id', validate({ headers: userToken, params: postId, body: postBody }), (request, response) =\u003e {\n  // Validation errors will be in request.validationErrors\n  // Validation values will be in request.validationValues\n});\n```\n\n### With custom settings\n\n```javascript\nimport express from 'express';\nimport { expressJoiValidations } from 'express-joi-validations';\n\nconst app = express();\napp.use(expressJoiValidations({ validationConfigs }));\n```\n\n#### Configuration\n\n- **throwErrors** (default: false): Define if errors should be thrown (suggested usage with [express-async-errors](https://github.com/davidbanham/express-async-errors))\n\n- **overwriteRequest** (default: false): Define if original request should be overwritten with validated data.\n\n### Helper methods\n\n#### validateBody\n\n```javascript\nimport { Joi, validateBody } from 'express-joi-validations';\n\n// POST /posts\n// body: { title: \"Lorem ipsum\", content: \"Lorem ipsum dolor sit amet\" }\n\nconst postBody = Joi.object({\n  title: Joi.string().required().trim(),\n  content: Joi.string().required().trim().min(10),\n});\n\nrouter.post('/posts', validateBody(postBody), postsController.create);\n```\n\n#### validateParams\n\n```javascript\nimport { Joi, validateParams } from 'express-joi-validations';\n\n// GET /posts/507f1f77bcf86cd799439011\n\nconst postId = Joi.object({\n  id: Joi.string().hex().length(24),\n});\n\nrouter.get('/posts/:id', validateParams(postId), postsController.detail);\n```\n\n#### validateQuery\n\n```javascript\nimport { Joi, validateQuery } from 'express-joi-validations';\n\n// GET /posts?page=2\n\nconst postQuery = Joi.object({\n  page: Joi.optional().number().integer().min(1).default(1),\n});\n\nrouter.get('/posts', validateQuery(postQuery), postsController.list);\n```\n\n#### validateHeaders\n\n```javascript\nimport { Joi, validateHeaders } from 'express-joi-validations';\n// DELETE /posts/507f1f77bcf86cd799439011\n// headers: { Authorization: \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\" }\n\nconst userToken = Joi.object({\n  authorization: Joi.string().regex(/^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_.+/=]*$/),\n});\n\nrouter.delete('/posts/:id', validateHeaders(userToken), postsController.remove);\n```\n\n##### Chain\n\n```javascript\nimport { validateHeaders, validateParams, validateBody } from 'express-joi-validations';\n\nrouter.put('/posts/:id', validateHeaders(userToken), validateParams(postId), validateBody(postBody), postsController.update);\n```\n\n##### Joi options\n\nTo every function, is possible to add a second parameter to specify custom [Joi Options](https://github.com/hapijs/joi/blob/master/lib/index.d.ts#L95):\n\n```javascript\nrouter.post('/posts', validateBody(postBody, { allowUnknown: true }), postsController.create);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattiamalonni%2Fexpress-joi-validations","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmattiamalonni%2Fexpress-joi-validations","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattiamalonni%2Fexpress-joi-validations/lists"}