The API will handle CRUD for an object[Wolf], Using the HTTP verbs — GET, PUT, POST and DELETE
Okay, Let’s start
Make sure you’ve node installed in your machine and yarn as a global package
Create a project directory name “/hapijs-mongoose-restapi” and run the command and fill the required details.
yarn init
Specify the main file as app.js
yarn init is similar to npm init, this will generate the package.json file, Refer yarn for more.
then install the node_modules we need for this API
yarn add hapi mongoose --dev
Building the hapi server, In the app.js
const Hapi = require('hapi');
const server = new Hapi.Server();
server.connection({
host: 'localhost',
port: 4000
});
server.route({
method: 'GET',
path: '/',
handler(request, reply) {
reply('Hello, world!');
}
});
server.route({
method: 'GET',
path: '/api',
handler(request, reply) {
reply('Hello, API!');
}
});
server.start(err => {
if (err) {
throw err;
}
console.log(`Server running at: ${server.info.uri}`);
});
exports.server = server;
server.connection — To connect to the server with the host and port
-
server.route — Will contain the route object
In the server.router, the handler will return using the return() API — http://hapijs.com/api#replyerr-result, where the return is used to conclude the handler activity by setting a response and returning the response and status to the handler.
server.start — To start the server
Starting the server and testing the index route
nodemon app.js
Let’s test the API using Postman — Chrome App/Mac App.
open Postman, select the GET HTTP verb and enter the url http://localhost:4000 and click Send, the response body should show Hapi World!.
Create a mongoDB connection to the API, create a file database.js in the root directory of the app
var Mongoose = require('mongoose');
//load database
Mongoose.connect('mongodb://localhost/hapijs-mongoose-restapi/');
var db = Mongoose.connection;
db.on('error', console.error.bind(console, 'connection error'));
db.once('open', function callback() {
console.log('Connection with database succeeded.');
});
exports.db = db;
and include the database.js in app.js
// app.js
const db = require('./database').db;
This will connect to the mongoDB and then let’s create the mongoose schema model for our wolves, the models was placed in /models directory
THE WOLF MODEL
the path to create the Wolf Model is — /hapijs-mongoose-restapi/models/Wolf.js
The Wolf model will be just having the name field where the SchemaType is String.
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
var WolfSchema = new Schema({
name: String
});
module.exports = mongoose.model('Wolf', WolfSchema);
with the Wolf.js model created, require this in the app.js
// app.js
const Hapi = require('hapi');
const server = new Hapi.Server();
const db = require('./database').db;
...
The nodemon will be in action here, it will watch for you changes in any of the file in the app directory and restarts the server for you, no CTRL+C hazzle.
ROUTES — Default API Route
URL — http://localhost:4000/api
// app.js
...
server.route({
method: 'GET',
path: '/api',
handler: function (request, reply) {
reply({'message': 'Hello, API!'});
}
});
ROUTES
Create a routes.js file and include that file in app.js
// routes.js
module.exports = [];
then include this routes.js into the app.js file
// app.js
…
const routes = require(‘./routes’);
server.route(routes);
The GET Route — GETTING ALL WOLVES
Require the Wolf model onto the router.js
URL — http://localhost:4000/api/wolves
// routes.js
const Wolf = require('./models/Wolf');
module.exports = [
{
method: 'GET',
path: '/api/wolves',
handler: function (request, reply) {
Wolf.find(function(error, wolves) {
if (error) {
console.error(error);
}
reply(wolves);
});
}
}
];
This is a simple route — which will render all the wolves in JSON format.
The POST Route — SAVING A WOLF
In the routes.js, create a module for POST which is for saving the Wolf
URL — http://localhost:4000/api/wolves/GrayWolf
// routes.js
const Wolf = require('./models/Wolf');
module.exports = [
{
method: 'GET',
path: '/api/wolves',
handler: function (request, reply) {
Wolf.find(function(error, wolves) {
...
});
}
},
{
method: ['PUT', 'POST'],
path: '/api/wolves/{name}',
handler: function (request, reply) {
const wolf = new Wolf({
name: request.params.name
});
wolf.save(function(error, wolf) {
if (error) {
console.error(error);
}
reply(wolf.id);
});
}
}
];
This will return the object id which is created in the mongoDB.
You can find the source code here.
Conclusion
We now have the ways to handle CRUD on Wolves using hapiJS.
Please go js-rest-api on that heart icon which is below this post and if you have any questions please comment below.
Top comments (0)