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 面向对象技术基础教程
Mar 03 Javascript
jQuery源码分析之Event事件分析
Jun 07 Javascript
XENON基于JSON变种
Jul 27 Javascript
jQuery编写widget的一些技巧分享
Oct 28 Javascript
JavaScript获取多个数组的交集简单实例
Nov 11 Javascript
js实现创建删除html元素小结
Sep 30 Javascript
jquery ztree异步搜索(搜叶子)实践
Feb 25 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
Dec 13 Javascript
JavaScript实现树的遍历算法示例【广度优先与深度优先】
Oct 26 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
Jan 11 Javascript
详解vue添加删除元素的方法
Jun 30 Javascript
js基于div丝滑实现贝塞尔曲线
Sep 23 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 HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
Python 错误和异常小结
2013/10/09 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
Python利用Scrapy框架爬取豆瓣电影示例
2020/01/17 Python
Python多分支if语句的使用
2020/09/03 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
职工年度考核评语
2014/12/31 职场文书
赞助商致辞
2015/07/30 职场文书
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang
Spring Boot实现文件上传下载
2022/08/14 Java/Android