Example Hapi.JS (Hapi.JS + Mongoose) codebase containing real world examples (CRUD, auth, advanced patterns, etc) that adheres to the RealWorld API spec.
Install Node.JS LTS version
cd /path/where/your/cloned/the/repo
npm install
to install all required dependenciesmongod -d /path/where/you/want/to/store/the/data
./generate_secret_key --encoding base64
npm start
to start the local serverhttp://localhost:8080/api
cd /path/where/your/cloned/the/repo
./generate_secret_key --encoding base64
docker-compose up
http://localhost:8080/api
mongoose-unique-validator
plugin helps us by formatting the error like a normal mongoose ValidationError
.lib/index.js
- The entry point to our application. This file bootstrap our HapiJS server. It also requires the routes and models we'll be using in the application.lib/config/
- This folder contains plugins configuration as well as a central location for configuration/environment variables.lib/modules/api/*
- This folder contains the routes definitions for our API.Requests are authenticated using the Authorization
header with a valid JWT. We use one hapijs pluggin in lib/modules/auth/index.js
that can be used to authenticate requests. The hapi-auth-jwt2
plugin using our application's secret and will return a 401 status code if the request cannot be authenticated. The payload of the JWT can then be accessed from request.auth.credentials.user
in the endpoint.
HapiJS auth mecanism provide 3 Authentications mode:
{ auth: 'jwt' }
set authentication to required.{ auth: { mode: 'optional', strategy: 'jwt' } }
config options in the same way as { auth: 'jwt' }
, but will not return a 401 status code if the request cannot be authenticated (JWT must be valid).{ auth: 'try', strategy: 'jwt' }
similar to optional
but invalid JWT will pass with request.auth.isAuthenticated
set to false
and request.auth.credentials
set to null
.HapiJS use Boom for errors response that use a particular format response, so we need to reformat it, to meet the Backend API specs errors handling section. So we added a preResponse
server extension, to reformat it in lib/modules/api/index.js
.
We use Joi for validating request params/payload and response payload.
We use hapi-swagger for the API endpoints documentation. Documentation available at http://localhost:8080/docs
.
PRs and issues are welcome!
git remote rename origin upstream
git remote add origin {YOUR_URL}
[WIP]
(work in progress) added to the title. The mongoose models come from the node-express-realworld-example-app codebase.