express-routie
Express API endpoints made easier
Quick start
npm i express-routie
const express = require("express");
const routie = require("express-routie");
const Joi = require("joi");
function implementMe() {
return {error: "Not implemented yet"};
}
const app = express();
routie(app, {
"/api/test": {
method: "get",
handler: implementMe,
schema: Joi.object().keys({
key: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).required()
})
}
});
app.listen(3000, () => console.log("Server started on port 3000"));
Reference
const routie = require("express-routie");
routie(app, routes)
app - Express app to add routes
routes - Route definitions in format:
{
"/address": {
method: "get",
schema: schema
}
}
You also can pass array, if you need multiple handlers for single route:
{
"/address": [{
method: "get",
schema: schema
}, {
method: "post",
schema: schema
}]
}
method - HTTP method for current route, can be one of the following:
get
post
put
patch
delete
del
all
schema - Joi schema to validate req.body or req.query, if method is "get". You can also pass validator function, it should return boolean.
Examples:
Joi.object().keys({
key: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).required()
}).with("key")
(requestBody) => typeof requestBody.key === "string" && /^[a-zA-Z0-9]{3,30}$/.test(requestBody.key)
getType - Function to determine request type(optional), if it's provided, it will get result and invoke appropriate handler.
Example:
{
"/address": {
method: "get",
schema: schema,
getType: () => "admin", // handler["admin"] will be invoked
handler: {
"admin": adminHandler
}
}
}
handler - Single function or map of handlers, must return Object or promise returning Object. Example:
{
"/hello": {
method: "get",
handler: () => ({hello: "world"})
}
}
You can send response manually by calling finish
function:
{
"/hello": {
method: "get",
handler: (req, finish) => {
if (req.query.failed === "true")
finish(res => res.redirect("http://example.com/failed"));
}
}
}