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 相关文章推荐
javascript 特性检测并非浏览器检测
Jan 15 Javascript
Javascript中封装window.open解决不兼容问题
Sep 28 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
Aug 10 Javascript
jQuery子元素过滤选择器用法示例
Sep 09 Javascript
AngularJS中的Promise详细介绍及实例代码
Dec 13 Javascript
js canvas实现QQ拨打电话特效
May 10 Javascript
js中this对象用法分析
Jan 05 Javascript
关于RxJS Subject的学习笔记
Dec 05 Javascript
微信小程序中使用echarts的实现方法
Apr 24 Javascript
解决layui-open关闭自身窗口的问题
Sep 10 Javascript
js键盘事件实现人物的行走
Jan 17 Javascript
JQuery使用数组遍历跳出each循环
Sep 01 jQuery
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
PHP5 操作MySQL数据库基础代码
2009/09/29 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
PHP goto语句用法实例
2019/08/06 PHP
asp 取文本框名称代码
2008/12/02 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
node.js的事件机制
2017/02/08 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
Angular实现响应式表单
2017/08/04 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
python发布模块的步骤分享
2014/02/21 Python
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
Python 元类实例解析
2018/04/04 Python
用Python写一个自动木马程序
2019/09/17 Python
python字符串的index和find的区别详解
2020/06/20 Python
百日安全生产活动总结
2014/07/05 职场文书
综合素质评价自我评价
2015/03/06 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
观后感开头
2015/06/19 职场文书
大学入学感言
2015/08/01 职场文书
员工规章制度范本
2015/08/07 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
Vue监视数据的原理详解
2022/02/24 Vue.js