Node.js开源应用框架HapiJS介绍


Posted in Javascript onJanuary 14, 2015

一、HapiJS介绍

HapiJS是一个开源的、基于Node.js的应用框架,它适用于构建应用程序和服务,其设计目标是让开发者把精力集中于开发可重用的应用程序的业务逻辑,向开发者提供构建应用程序业务逻辑所需的基础设施。HapiJS目前的最新版本为7.2.0版。

二、HapiJS安装和项目配置

1、安装Hapi库
HapiJS的安装很简单,执行如下命令:

$ sudo npm install hapi -g

hapi@7.2.0 /usr/local/lib/node_modules/hapi

├── cryptiles@2.0.4

├── heavy@1.0.0

├── topo@1.0.2

├── accept@1.0.0

├── items@1.1.0

├── kilt@1.1.1

├── catbox-memory@1.1.0

├── boom@2.5.1

├── qs@2.2.4

├── call@1.0.0

├── statehood@1.2.0

├── h2o2@2.0.1

├── iron@2.1.2

├── shot@1.3.5

├── glue@1.0.0

├── wreck@5.0.1

├── hoek@2.8.0

├── catbox@4.0.3

├── vision@1.1.0

├── mimos@1.0.0 (mime-db@1.1.1)

├── rejoice@1.0.0 (bossy@1.0.2)

├── inert@1.1.0 (lru-cache@2.5.0)

├── joi@4.7.0 (isemail@1.1.1)

└── subtext@1.0.1 (content@1.0.1, pez@1.0.0)

2、配置项目

1)创建一个名为myproject的新目录

$ mkdir myproject

$ cd myproject

2)在目录下运行初始化命令
$ npm init

此命令会生成package.json文件,它是项目的元数据。
接着执行命令:
$ npm install --save hapi

它会安装hapi库到项目下,并把hapi的依赖关系写入package.json。

此时,项目开发所需的一切都已经准备完毕。

三、开发实例

1、创建服务器

// server.js

var Hapi = require('hapi');

var server = new Hapi.Server(3000);
server.start(function(){

console.log('Server running at: ', server.info.uri);

});

首先,我们需要Hapi库。
其次,我们创建一个新hapi服务器对象,并把要监听的端口号传递给服务器对象。
最后,服务器对象启动,并输出日志信息。
要说明一点,我们创建服务器对象时,可以提供主机名、IP地址,甚至是Unix的socket文件,或者是Windows系统绑定到服务器命名的管道。

2、启动服务器
执行命令:

$ node server.js

访问http://127.0.0.1:3000/ ,浏览器显示如下内容:
{"statusCode":404,"error":"Not Found"}

很正常,因为服务器上本身就没有任何内容,下面把路由逻辑添加上。

3、路由逻辑

// server.js

var Hapi = require('hapi');

var server = new Hapi.Server(3000);
server.route({

method: 'GET',

path: '/',

handler: function(request, reply){

reply('Hello, world!');

}

});
server.route({

method: 'GET',

path: '/{name}',

handler: function(request, reply){

reply('Hello, ' + encodeURIComponent(request.params.name) + "!");

}

});
server.start(function(){

console.log('Server running at: ', server.info.uri);

});

再次启动服务器:

$ node server.js

并访问http://127.0.0.1:3000/ ,浏览器显示如下内容:
Hello, world!
访问http://127.0.0.1:3000/张三 ,浏览器显示如下内容:
Hello, %E5%BC%A0%E4%B8%89!

可见,路由逻辑运行正常。

要注意:
method的参数可以是任意有效的HTTP方法,也可以是星号*(表示任意HTTP方法)。
path的参数定义了访问路径,路径可以包含参数、可选参数,甚至是通配符。

四、使用插件

在创建Web应用时,通常我们都需要访问日志。要为应用程序添加基本的日志输出,我们可以在服务器上加载good插件。

1、安装good插件

$ sudo npm install --save good

good@3.1.1 node_modules/good

├── json-stringify-safe@5.0.0

├── good-reporter@2.0.0

├── async@0.9.0

├── hoek@2.8.1

├── moment@2.8.3

├── good-file@2.0.0 (items@1.1.0)

└── joi@4.7.0 (topo@1.0.2, isemail@1.1.1)

2、更新server.js的代码
// server.js

var Hapi = require('hapi');

var Good = require('good');
var server = new Hapi.Server(3000);
server.route({

method: 'GET',

path: '/',

handler: function(request, reply){

reply('Hello, world!');

}

});
server.route({

method: 'GET',

path: '/{name}',

handler: function(request, reply){

reply('Hello, ' + encodeURIComponent(request.params.name) + "!");

}

});
server.pack.register(Good, function(err){

if(err){

// something bad happened loading the plugin

throw err;

}

server.start(function(){

server.log('info', 'Server running at: ' + server.info.uri);

});

});

运行server.js,控制台输出:
141102/161007.644, info, Server running at: http://localhost:3000

如果我们接着访问:http://127.0.0.1:3000/liqiang
和http://127.0.0.1:3000/
控制台会继续输出:
141102/161150.689, request, http://Thinker-LQ:3000: get /liqiang {} 200 (37ms) 

141102/161155.812, request, http://Thinker-LQ:3000: get / {} 200 (4ms)
Javascript 相关文章推荐
防止文件缓存的js代码
Jan 10 Javascript
使用JavaScript和C#中获得referer
Nov 14 Javascript
JS实现弹性漂浮效果的广告代码
Sep 02 Javascript
jQuery插件实现适用于移动端的地址选择器
Feb 18 Javascript
jQuery调用Webservice传递json数组的方法
Aug 06 Javascript
vue.js实现请求数据的方法示例
Feb 07 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
Mar 15 Javascript
bootstrap suggest搜索建议插件使用详解
Mar 25 Javascript
基于Datatables跳转到指定页的简单实例
Nov 09 Javascript
ES6/JavaScript使用技巧分享
Dec 14 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
Oct 20 Javascript
vue+ts下对axios的封装实现
Feb 18 Javascript
jQuery中Ajax的load方法详解
Jan 14 #Javascript
jquery获取当前日期的方法
Jan 14 #Javascript
JavaScript 学习笔记之基础中的基础
Jan 13 #Javascript
jQuery 中DOM 操作详解
Jan 13 #Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
Jan 13 #Javascript
jQuery过滤选择器详解
Jan 13 #Javascript
jQuery入门介绍之基础知识
Jan 13 #Javascript
You might like
phpmyadmin的#1251问题
2006/11/25 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
js给页面加style无效果的解决方法
2014/01/20 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
js实现交通灯效果
2017/01/13 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python配置mysql的教程(推荐)
2017/10/13 Python
使用Python搭建虚拟环境的配置方法
2018/02/28 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
python的scipy实现插值的示例代码
2019/11/12 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
网络安全方面的面试题
2015/11/04 面试题
客户经理岗位职责
2013/12/08 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
小学感恩节活动总结
2015/03/24 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL
新手入门Mysql--sql执行过程
2021/06/20 MySQL
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电
Go语言怎么使用变长参数函数
2022/07/15 Golang