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中文入门指南,翻译加实例,jQuery的起点教程
Jan 13 Javascript
javascript读取RSS数据
Jan 20 Javascript
js 弹出框只弹一次(二次修改之后的)
Nov 26 Javascript
javascript中数组中求最大值示例代码
Dec 18 Javascript
jQuery实现的AJAX简单弹出层效果代码
Nov 26 Javascript
基于jquery实现省市联动特效
Dec 17 Javascript
html判断当前页面是否在iframe中的实例
Nov 30 Javascript
javascript图片预览和上传(兼容IE)
Mar 15 Javascript
JavaScript设计模式之观察者模式实例详解
Jan 16 Javascript
原生js+ajax分页组件
Jan 30 Javascript
JS Thunk 函数的含义和用法实例总结
Apr 08 Javascript
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
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实现快速排序的三种方法分享
2014/03/12 PHP
js中符号转意问题示例探讨
2013/08/19 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
js实现购物车功能
2018/06/12 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
Python脚本实现集群检测和管理功能
2015/03/06 Python
Python读取Excel的方法实例分析
2015/07/11 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
详解tensorflow实现迁移学习实例
2018/02/10 Python
对pandas中to_dict的用法详解
2018/06/05 Python
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
CentOS7安装Python3的教程详解
2019/04/10 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
英语专业学生个人求职信范文
2014/01/06 职场文书
简短证婚人证婚词
2014/01/09 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
2016小学新学期寄语
2015/12/04 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python
python中if和elif的区别介绍
2021/11/07 Python