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 firefox兼容ie的dom方法脚本
May 18 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
Dec 12 Javascript
JS this作用域以及GET传输值过长的问题解决方法
Aug 06 Javascript
js字符串截取函数substr substring slice使用对比
Nov 27 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
Nov 24 Javascript
JavaScript入门系列之知识点总结
Mar 24 Javascript
对js中回调函数的一些看法
Aug 29 Javascript
JavaScript中双向数据绑定详解
May 03 Javascript
基于ionic实现下拉刷新功能
May 10 Javascript
js中的深浅拷贝问题简析
May 10 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 jQuery
jQuery实现广告显示和隐藏动画
Jul 04 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
php页面缓存ob系列函数介绍
2012/10/18 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
php短信接口代码
2016/05/13 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
js 事件小结 表格区别
2007/08/13 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
jQuery预加载图片常用方法
2015/06/15 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
Angular通过angular-cli来搭建web前端项目的方法
2017/07/27 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
jQuery动态生成的元素绑定事件操作实例分析
2019/05/04 jQuery
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
Python制作exe文件简单流程
2019/01/24 Python
Python Web版语音合成实例详解
2019/07/16 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
毕业生自我推荐
2013/11/04 职场文书
幼儿园开学家长寄语
2014/01/19 职场文书
幼儿教师培训感言
2014/03/08 职场文书
个人授权委托书范文
2014/09/21 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python