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 相关文章推荐
Web层改进II-用xmlhttp 无声息提交复杂表单
Jan 22 Javascript
ExtJS 2.2.1的grid控件在ie6中的显示问题
May 04 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
Sep 04 Javascript
JSON.stringify 语法实例讲解
Mar 14 Javascript
jQuery点击后一组图片左右滑动的实现代码
Aug 16 Javascript
理解javascript回调函数
Dec 28 Javascript
使用JQuery在线制作ppt并在线演示源码特效
Sep 08 Javascript
JQuery给select添加/删除节点的实现代码
Apr 26 Javascript
angular学习之ngRoute路由机制
Apr 12 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
Aug 29 Javascript
js实现动态添加上传文件页面
Oct 22 Javascript
ES6基础之字符串和函数的拓展详解
Aug 22 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
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
详解Bootstrap插件
2016/04/25 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
node.js处理前端提交的GET请求
2019/08/30 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
python如何在循环引用中管理内存
2018/03/20 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
python中实现控制小数点位数的方法
2019/01/24 Python
Python3常见函数range()用法详解
2019/12/30 Python
Python如何读取文件中图片格式
2020/01/13 Python
市场营销职业生涯规划书范文
2014/01/12 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
四风查摆剖析材料
2014/10/10 职场文书
布达拉宫导游词
2015/02/02 职场文书
2015年共青团工作总结
2015/05/15 职场文书
贷款工作证明模板
2015/06/12 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android
windows系统安装配置nginx环境
2022/06/28 Servers