express-simple-controllers

Create super simple controllers for routing an express app.
How to use
First off, initialize the controllers
import initialize from "express-simple-controllers";
import express from "express";
const router = express.Router();
initialize(router);
Then create a controllers
directory and add anything with an _controller.js
suffix. e.g. home_controller.js
.
Anything with that suffix will be added as a controller.
If you need to change the controller directory...
initialize(router, { directory: "server/controllers" });
Basic
You can create controller methods in a few different ways.
const show = {
method: "GET",
route: "/home",
handler(req, res, next) {
res.render("home");
}
};
export { show };
Handler types
const show = {
method: "GET",
route: "/home",
handler: {
json(req, res, next) {
res.json({ home: "home" });
}
html(req, res, next) {
res.render("home");
}
}
};
export { show };
Middleware and before
If you export a before
function, it will run before every method in the file unless you pass a skipBefore: true
.
const before = (req, res, next) => {
req.something = "a thing";
next();
}
const show = {
method: "GET",
route: "/home",
handler(req, res, next) {
const { something } = req;
res.render("home", { something });
}
};
const showNoBefore = {
method: "GET",
route: "/home",
skipBefore: true,
handler(req, res, next) {
}
};
export {
before,
show,
showNoBefore,
};
You can also pass an array of of middleware.
const show = {
method: "GET",
route: "/home",
middleware: [first, second(someOptions)],
handler(req, res, next) {
res.render("home");
}
};
export { show };
CRUD routes
You can also create a simple crud controller by creating named functions in the exports...
const before = (req, res, next) => next();
const show = (req, res, next) => {};
const list = (req, res, next) => {};
const update = (req, res, next) => {};
const create = (req, res, next) => {};
const delete = (req, res, next) => {};
export {
show,
list,
update,
create,
delete
};
The prefix of the file sets the route, in the above case /user
because the controller is named user_controller.js
.
Build
Will build to the /dist
directory.
npm run build
Running tests
npm run test
npm run test:ci # Runs in watch mode