Saturday, August 24, 2019

What is hapi framework?

Hapi is an open-source and rich Node.js framework created and actively maintained by Eran Hammer. Hapi is a rich framework for building applications and services. It enables developers to focus on writing reusable application logic instead of spending time building infrastructure.
Several organizations such as PaypalVendigoClarifyPling, and Npm already use Hapiin production. Hapi is a framework that gives you greater flexibility when compared to other Node.js frameworks. It is also perfect for grounds up development. The documentation is detailed, and there is a vibrant community of users. Furthermore, there are dozens of plugins for virtually any feature you are trying to build into your application.

Overview

This tutorial will show how to set up a basic hapi server that displays "Hello World!" in your browser.

Installing hapi

Create a new directory myproject, and from there:
  • Run: cd myproject, this goes into the created project folder.
  • Run: npm init and follow the prompts. This will generate a package.json file for you.
  • Run: npm install @hapi/hapi, this will install the latest version of hapi as a dependency in your package.json.

Creating a Server

A very basic hapi server looks like the following:
'use strict';

const Hapi = require('@hapi/hapi');

const init = async () => {

    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    await server.start();
    console.log('Server running on %s', server.info.uri);
};

process.on('unhandledRejection', (err) => {

    console.log(err);
    process.exit(1);
});

init();
First, you require hapi. Then you initialize a new Hapi.server() with connection details containing a port number to listen on and the host information. After that you start the server and log that it's running.
When creating a server, you can provide a hostname, IP address, a Unix socket file, or Windows named pipe to bind the server to. For more details, see the API reference.
The host property set to localhost is likely the safest choice. In a docker container, however, the localhost may not be accessible outside of the container and using host: '0.0.0.0' may be needed.

Adding Routes

After you get the server up and running, its time to add a route that will display "Hello World!" in your browser.
'use strict';

const Hapi = require('@hapi/hapi');

const init = async () => {

    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    server.route({
        method: 'GET',
        path:'/',
        handler: (request, h) => {

            return 'Hello World!';
        }
    });

    await server.start();
    console.log('Server running on %s', server.info.uri);
};

process.on('unhandledRejection', (err) => {

    console.log(err);
    process.exit(1);
});

init();
Save the above as index.js and start the server with the command node index.js. Now you'll find that if you visit http://localhost:3000 in your browser, you'll see the text 'Hello, World!'.
The method property can be any valid HTTP method, array of HTTP methods, or an asterisk to allow any method.
The path property defines the path including parameters. It can contain optional parameters, numbered parameters, and even wildcards. For more details, see the routing tutorial.
The handler function performs the main business logic of the route and sets the response. The handler must return a value, a promise, or throw an error.

Everything Else

hapi has many, many other capabilities and only a select few are documented in tutorials here. This tutorial was intentionally minimal, we highly recommend you to check out the plugins tutorial. It will give some more knowledge to better organize your hapi project. We also have other tutorials of interest, please use the list to your right to check them out. Everything else is documented in the API referenceand, as always, feel free to ask questions on github or just visit us on slack.

No comments:

Post a Comment

No String Argument Constructor/Factory Method to Deserialize From String Value

  In this short article, we will cover in-depth the   JsonMappingException: no String-argument constructor/factory method to deserialize fro...