Express Middleware

This provides utilities for using Prudence in Express.

Prudence.Middleware(schema[, errorHandler[, errorMessages[, options]]])

Creates an Express Middleware that validates req.query (method “GET”) or req.body (all other methods) using Prudence.

On success, this

Arguments
  • schema (object) – The Prudence schema to validate req.query or req.body against.

  • errorHandler (function) – If prudence hits an error, this function determines what to do with it. See Error Handler, optional.

  • errorMessages (object) – Error message overrides for Prudence, optional.

  • options (object) – The options for Prudence, optional.

Returns

Express Middleware Function

Note

Passing an errorHandler is optional. If one is not passed, the middleware will return 400 and the error message in JSON.

Example usage:

let schema = {
    username: Prudence.isBoundedString(3, 20),
    password: Prudence.isBoundedString(3, 20),
    confirmPassword: (self, parent) => self === parent.password
};

let errorHandler = (req, res, next, errMsg) => res.send(400).send(`You messed up! ${errMsg}`);

router.post("/register", Prudence.Middleware(schema, errorHandler), (req, res) => {
    // assign cookies or something
    return res.redirect("/"); // send users back to homepage
});

Error Handler

A function which is passed 4 parameters. In order; req, res, next, errMsg.

The first three are identical to their Express middleware counterparts. The errMsg is the string Prudence returned.

Curry Middleware

It’s common that you’ll want to re-use error handlers. To support this, you can use the following function.

Prudence.CurryMiddleware(errorHandler)

Returns a function that takes schema, [errorMessages, [options]] to create express middleware. The initially passed errorHandler is always used.

Arguments
  • errorHandler (function) – If prudence hits an error, this function determines what to do with it. See Error Handler, optional.

Returns

See above.

Example usage:

let schema = {
    username: Prudence.isBoundedString(3, 20),
    password: Prudence.isBoundedString(3, 20),
    confirmPassword: (self, parent) => self === parent.password
};

let errorHandler = (req, res, next, errMsg) => res.send(400).send(`You messed up! ${errMsg}`);

let MiddlewareGenerator = Prudence.CurryMiddleware(errorHandler);

router.post("/register", MiddlewareGenerator(schema), (req, res) => {
    // assign cookies or something
    return res.redirect("/"); // send users back to homepage
});

Example usage:

let schema = {
    username: Prudence.isBoundedString(3, 20),
    password: Prudence.isBoundedString(3, 20),
    confirmPassword: (self, parent) => self === parent.password
};

let errorHandler = (req, res, next, errMsg) => res.send(400).send(`You messed up! ${errMsg}`);

router.post("/register", Prudence.Middleware(schema, errorHandler), (req, res) => {
    // assign cookies or something
    return res.redirect("/"); // send users back to homepage
});