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 相关文章推荐
jQuery基础知识filter()和find()实例说明
Jul 06 Javascript
jQuery获取当前对象标签名称的方法
Feb 07 Javascript
JavaScript汉诺塔问题解决方法
Apr 21 Javascript
自己动手写的javascript前端等待控件
Oct 30 Javascript
JS正则表达式比较常见用法
Jan 26 Javascript
使用vue编写一个点击数字计时小游戏
Aug 31 Javascript
BootStrapTable服务器分页实例解析
Dec 20 Javascript
Vue实现动态响应数据变化
Apr 28 Javascript
Angular4学习笔记之实现绑定和分包
Aug 01 Javascript
Echarts基本用法_动力节点Java学院整理
Aug 11 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
Sep 20 jQuery
微信小程序如何使用云开发
May 17 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
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
2018/01/20 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
python里将list中元素依次向前移动一位
2014/09/12 Python
Python赋值语句后逗号的作用分析
2015/06/08 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
Atom的python插件和常用插件说明
2018/07/08 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
python 公共方法汇总解析
2019/09/16 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
python hash每次调用结果不同的原因
2019/11/21 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
html5时钟实现代码
2010/10/22 HTML / CSS
椰子猫砂:CatSpot
2018/08/27 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
追悼词范文大全
2015/06/23 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏
MySQL GTID复制的具体使用
2022/05/20 MySQL