The pop-api project aims to provide the core modules for the
popcorn-api
project, but
can also be used for other purposes by using middleware.
- Cli middleware for reading user input with
commander.js
. - Database middleware for connection to MongoDB through
mongoose
. - Logging of routes and other information using
winston
. - Uses
express
under the hood with:- Body middleware with
body-parser
- Error handling
- Security middleware with
helmet
- Body middleware with
- Interface for registering routes for
express
. - Data Access Layer (DAL) class for standard CRUD operations.
- Route controller to handle routes for your content.
$ npm install --save pop-api
For your basic setup you have to create a controller which will handle the
routes. Your controller needs to extend from the IController
interface to
implement the registerRoutes
method which will be called during the setup.
The route controller below will be created with a constructor which takes an
object as the parameter. This example will register a GET /hello
route and
sends a JSON object as a response with a greeting to the name provided by the
object from the constructor.
// ./MyRouteController.js
import { IController } from 'pop-api'
// Extend your route controller from the 'IController' interface.
export default class MyRouteController extends IController {
// The constructor takes an object as the parameter.
constructor({name}) {
super()
this.name = name
}
// Implement the 'registerRoutes' method from the 'IController interface.
registerRoutes(router, PopApi) {
router.get('/hello', this.getHello.bind(this))
}
// Router middleware to execute on the 'GET /hello' route.
getHello(req, res, next) {
return res.json({
message: `Hello, ${this.name}`
})
}
}
To initialize the API we create an array of the route controllers and their
constructor arguments we want to register. Then we just call the init
method
with the route controllers array, and the name and version your API (needed for
the Cli). The API should run by default on port 5000
.
// ./index.js
import { PopApi } from 'pop-api'
import MyRouteController from './MyRouteController'
import { name, version } from './package.json'
;(async () => {
try {
// Define the controllers you want to use.
const controllers = [{
Controller: MyRouteController, // The controller to register.
args: { // The arguments passed down to the
name: 'John' // The additional arguments to pass to
// your route controller.
}
}]
// Initiate your API with the necessary parameters.
await PopApi.init({
controllers, // The controllers to register.
name, // The name of your API.
version // The version of your API.
})
// API is available on port 5000.
// GET http://localhost:5000/hello -> { message: 'Hello, John' }
} catch (err) {
console.log(err)
}
})()
MIT License