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 相关文章推荐
addEventListener()第三个参数useCapture (Boolean)详细解析
Nov 07 Javascript
php中给js数组赋值方法
Mar 10 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
Aug 22 Javascript
jQuery实现的支持IE的html滑动条
Mar 16 Javascript
JS扩展方法实例分析
Apr 15 Javascript
全面解析JavaScript中“&&”和“||”操作符(总结篇)
Jul 18 Javascript
Javascript调试之console对象——你不知道的一些小技巧
Jul 10 Javascript
Bootstrap datepicker日期选择器插件使用详解
Jul 26 Javascript
vue实现验证码按钮倒计时功能
Apr 10 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
使用Vue实现调用接口加载页面初始数据
Oct 28 Javascript
小程序瀑布流组件实现翻页与图片懒加载
May 19 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
PHP的面向对象编程
2006/10/09 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
jquery实现的图片点击滚动效果
2014/04/29 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
jquery.validate使用详解
2016/06/02 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
js实现全选反选不选功能代码详解
2019/04/24 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
Python创建xml的方法
2015/03/10 Python
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
pymysql模块的操作实例
2019/12/17 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
2019年Java 最常见的 面试题
2016/10/19 面试题
物业保安主管岗位职责
2013/12/25 职场文书
主要负责人任命书
2014/06/06 职场文书
会议欢迎词范文
2015/01/27 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
追悼会家属答谢词
2015/09/29 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书