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的history历史记录插件
Dec 11 Javascript
js 浏览器事件介绍
Mar 30 Javascript
js中关于一个分号的崩溃示例
Nov 11 Javascript
函数式 JavaScript(一)简介
Jul 07 Javascript
javascript函数式编程程序员的工具集
Oct 11 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
Mar 25 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
Sep 19 Javascript
jQuery的ready方法实现原理分析
Oct 26 Javascript
vue 1.x 交互实现仿百度下拉列表示例
Oct 21 Javascript
在微信小程序中保存网络图片
Feb 12 Javascript
搭建一个Koa后端项目脚手架的方法步骤
May 30 Javascript
vuex Module将 store 分割成模块的操作
Dec 07 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 file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
php实现生成验证码实例分享
2016/04/10 PHP
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
JS实现可改变列宽的table实例
2013/07/02 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
2018/08/08 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
python实现下载指定网址所有图片的方法
2015/08/08 Python
Python MD5加密实例详解
2017/08/02 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
python Web开发你要理解的WSGI & uwsgi详解
2018/08/01 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
2020/01/25 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
素质拓展感言
2014/01/29 职场文书
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
晨会主持词
2014/03/17 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
师德师风自查材料
2014/10/14 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
喋血孤城观后感
2015/06/08 职场文书