HapiJS入门篇之使用初体验

HapiJS是WalmartLabs旗下的一款开源产品,从本质上来说与ExpressJS是一致的,均提供了node环境下的http服务器以应对快速的网站应用开发。为了实现高层次的网站开发框架,它们都引入了路由、处理器、插件和验证等模块。

今天,我们以最基础的示例来体验一番。实现的功能:

  1. 建立HTTP服务器
  2. 建立一个测试路径/路由
  3. 建立处理请求路径的处理器(函数)
  4. 启动HTTP服务器

了解HapiJS相关术语

在我们之前的本文示例实现功能描述中,其实我们已经使用了几个术语,这里再次从实现的角度归纳如下:

  • Server – 整个网站应用的底层对象,是整个应用的基石。
  • connection – 一个连接实例,一般就是请求的host和port。
  • route – 一条包含connection的URI,通过该请求,我们的服务器端会使用指定的函数去响应。

Hapi HELLOWORLD示例开始

我们整理完思路和概念之后,就开始实际的操作。

环境准备/说明

我们本机的环境以及前期准备工作,诸如建立示例的应用目录结构、初始化应用以及依赖的NPM包,如下:


$ node -v
v6.10.2
$ yarn -v
yarn install v0.22.1
$ mkdir getting-started-with-hapi-js-par-1 && cd $_
$ mkdir src
$ touch .babelrc .gitignore .eshintrc src/server.js
$ vim .babelrc
###
{
    "presets": [ "es2015" ]
}
###
$ vim .gitignore
###
node_modules
###
$ vim .eshintrc
###
{                                             
        "rules":{                             
                "no-console":"off",           
        },                                    
                "extends": "airbnb",          
                "parser": "babel-eslint"  
}                                             
###
$ yarn init
$ yarn add babel-core babel-preset-es2015 hapi
###
{
  "name": "getting-started-with-hapi-js-part-1",
  "version": "1.0.0",
  "description": "Getting started with Hapi.js -- Part 1",
  "main": "index.js",
  "author": "Bing Lan",
  "license": "MIT",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node bootstrap.js"
  },
  "dependencies": {
    "babel-core": "^6.24.1",
    "babel-preset-es2015": "^6.24.1",
    "hapi": "^16.1.1"
  }
}
###

建立应用入口JS文件

我们建立应用入口文件如下:


require('babel-core/register'); // 引入babel的register模块,帮助我们实时转化ES6
require('./src/server');

利用Hapi编写应用示例主文件server.js

到这里,我们才正式开始接触到本文的核心对象Hapi JS!

建立HTTP服务器

首先,我们引入Hapi的HTTP服务器模块,然后设定一个连接实例。


import Hapi from 'hapi';              
                                      
const server = new Hapi.Server();     
                                      
server.connection({                   
  port: 8080,                         
});                                   
                                      

设置路由并绑定处理的handler

现在我们的服务器和连接都有了,那么我们要针对前端请求来设置路由。假设我们这里有一条/hello的路径。


......
server.route({                    
  method: 'GET',                  
  path: '/hello',                 
  handler: (request, reply) => {  
    reply('Hello World');         
  },                              
});                               

启动HTTP服务器

我们需要的基本示例代码已经完成。 最后,我们启动HTTP服务器即可。


......
server.start((err) => {                                  
  if (err) {                                             
    // Fancy error handling here                         
    console.error('Error was handled!');                 
    console.error(err);                                  
  }                                                      
                                                         
  console.log(`Server started at ${server.info.uri}`);   
});                                                      

代码并不难理解,我们这里说明一下server.info属性。它包含以下内容:

  • created – 服务器实例建立的时间
  • started – 服务器实例启动的时间
  • host – 服务器的hostname
  • port – 服务器监听的端口
  • protocol – 服务器所使用的HTTP协议
  • id – 服务器实例的ID
  • uri – 当前服务器的完整URI
  • address – 服务器绑定的IP地址

测试


$ yarn start
Server started at http://putty.biz:8080

我们在浏览器中访问http://putty.biz:8080/hello,即可以看到示例Hello World!
更多HapiJS的API文档请点击这里