Skip to content

muturgan/fastest-express-validator

Repository files navigation

fastest-express-validator

NPM Version Badge CI Build Badge Hits-of-Code Coverage Badge License Badge

request validation middleware for express based on fastest-validator (testted with both express v4 and v5)

Example

const app = require('express')();
const {
    RequestValidator,
    QueryValidator,
    DefaultRequestValidator,
} = require('fastest-express-validator');

const querySchema = {
    name: { type: "string", min: 3, max: 255 },
};

const customErrorHandler = (err, req, res, next) => {
    console.log('error at the customErrorHandler:');
    console.log(err);
    res.sendStatus(418);
}

const validationMiddleware = RequestValidator({
    // also you can pass the "body" and "params" fields
    query: querySchema,
});

const middlewareWithCustomHandler = RequestValidator(
    { query: querySchema },
    customErrorHandler,
);

const fastMiddleware = RequestValidator(
    { query: querySchema },
    null, // define a custom error handler if you want to

    /* you can pass some options for a fastest-validator instance
    it should implements a ValidatorConstructorOptions interface
    note that this package set a "useNewCustomCheckerFunction" option in true by default
    so you should override it to use a v1 syntax for built-in rules */
    { haltOnFirstError: true }
);

// also this package provides BodyValidator and ParamsValidator short validators
const shortQueryMiddleware = QueryValidator(
    querySchema,
    // also you can pass a custom error handler in a second argument,
    // also you can pass a ValidatorConstructorOptions in a third argument
);

app.get('/', validationMiddleware, (req, res) => {
    console.log('a query object is:');
    console.log(req.query);
    res.send('Hello World');
});

app.get('/custom', middlewareWithCustomHandler, (req, res) => {
    console.log('a query object at the custom route is:');
    console.log(req.query);
    res.send('Hello Custom');
});

app.get('/fast', fastMiddleware, (req, res) => {
    console.log('a query object at the fast route is:');
    console.log(req.query);
    res.send('It was fast');
});

app.get('/short', shortQueryMiddleware, (req, res) => {
    console.log('a query object at the short route is:');
    console.log(req.query);
    res.send('Hello Short');
});

// This middleware already have a default validation error handling behaviour -
// send 404 on params validation error
// and 422 (with error details at response body) on query and body validation error.
const defaultQueryValidationMiddleware = DefaultRequestValidator(
    { query: schema /* body, params */ },
    // you can pass a ValidatorConstructorOptions here
);
app.get('/default', defaultQueryValidationMiddleware, (req, res) => {
    console.log('a query object at the default route is:');
    console.log(req.query);
    res.send('Hello Default');
});

app.use((err, req, res, next) => {
    console.log('OMG!');
    console.error(err);
    res.status(500).send('Something broke!');
});

app.listen(2023, () => console.log('check it on http://localhost:2023?name=one'));

About

request validation middleware for express based on fastest-validator

Resources

License

Stars

Watchers

Forks