Next Joi

Validate NEXT.js API Routes with joi
Alternatives To Next Joi
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Next Routes2,43968678a month ago46May 21, 2018mitJavaScript
Universal dynamic routes for Next.js
Next Connect1,14058 months ago33July 06, 202215mitTypeScript
The TypeScript-ready, minimal router and middleware layer for Next.js, Micro, Vercel, or Node.js http/http2
Nextjs Sitemap Generator493324 months ago27March 01, 202112mitTypeScript
Generate sitemap.xml from nextjs pages
Kimia Ui285
9 months ago1mitTypeScript
A collection of UI Components for React built with Tailwind CSS 3
Generouted22127 days ago33February 05, 20235mitTypeScript
Generated file-based routes for Vite
Routes Gen20732 months ago16January 08, 2023mitTypeScript
Framework agnostic routes typings generator. Remix ☑️ SolidStart ☑️
Nextjs Vercel Firebase180
4 months agoTypeScript
Next.js app using API Routes to connect with Firestore.
Next Test Api Route Handler176117 days ago68January 03, 20236mitTypeScript
:rocket::sparkles: Confidently unit test your Next.js API routes/handlers in an isolated Next.js-like environment
Next Boilerplate148
5 years ago3JavaScript
Minimal Next.js boilerplate
Next Crud146
5 months ago10May 20, 20224mitTypeScript
Full-featured CRUD routes for Next.js
Alternatives To Next Joi
Select To Compare


Alternative Project Comparisons
Readme

next-joi

Validate NEXT.js API Routes with joi

github action badge

Install

yarn add next-joi

This package does not bundle with next.js or joi, so you will need to install them separately.

Getting started

How does it work?

The validation function will check the incoming request against the defined validation schemas. If the request does not comply with the schemas, it will be aborted immediately, and (by default) a 400 BAD REQUEST response will be returned. It is possible to customize this error handling by passing a custom onValidationError function to the primary factory function.

lib/middlewares/validation.ts

import withJoi from "next-joi";

export default withJoi({
  onValidationError: (_, res) => {
    res.status(400).end();
  },
});

Working with NEXT.js API Routes

If you are using standard NEXT.js API Routes, you may use the validation function to wrap your route definition and pass along the validation schema:

import Joi from "joi";

import validate from "/lib/middlewares/validation";

const schema = Joi.object({
  birthdate: Joi.date().iso(),
  email: Joi.string().email().required(),
  name: Joi.string().required(),
});

export default validate({ body: schema }, (req, res) => {
  // This function will be only executed if the incoming request complies
  // with the validation schema defined above.
});

NEXT.js & connect-like middlewares

If your routes are powered by using a package such as next-connect, you can still use next-joi! The middleware function is ready to work with connect just out-of-the-box:

import Joi from "joi";
import connect from "next-connect";

import validate from "/lib/middlewares/validation";

const schema = Joi.object({
  birthdate: Joi.date().iso(),
  email: Joi.string().email().required(),
  name: Joi.string().required(),
});

export default connect().post(validate({ body: schema }), (req, res) => {
  // This function will be only executed if the incoming request complies
  // with the validation schema defined above.
}))

API

withJoi(config?) => validate

This factory function may optionally receive a configuration object. It will return the actual validation function (validate) that can be used as API route middleware.

config

Optional

If omitted, next-joi will use a default configuration.

config.onValidationError

Required

Custom error function to handle validation errors. It will receive the API request, response, and validation error.

import withJoi from "next-joi";

export default withJoi({
  onValidationError: (req, res, error) => {
    res.status(400).end();
  },
});

validate(schemas, handler)

The validate function has support to check the following request fields: body, headers and query. The first argument for this function should always be an object with the desired validation schemas.

schemas

Required

Even if empty, this argument is required.

schemas.body

Optional

A valid joi schema.

schemas.headers

Optional

Note: since most of the time, you may receive more headers than expected, it is a good practice to make this schema always support unknown keys. Otherwise, the validation will fail.

A valid joi schema.

schemas.query

Optional

A valid joi schema.

handler

Optional

A valid next API Route handler. If you are using the validate function without a connect-like middleware engine, this argument becomes mandatory.

Example:

const handler = function (req: NextApiRequest, res: NextApiResponse) {
  // implementation
};

export default validate({}, handler);
Popular Routes Projects
Popular Nextjs Projects
Popular Networking Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Typescript
Reactjs
Validation
Nextjs
Schema
Routes