HapiJS开发手册

简介: HapiJS开发手册 一、HapiJS介绍 HapiJS是一个开源的、基于Node.js的应用框架,它适用于构建应用程序和服务,其设计目标是让开发者把精力集中于开发可重用的应用程序的业务逻辑,向开发者提供构建应用程序业务逻辑所需的基础设施。
HapiJS开发手册
一、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) 

目录
相关文章
|
NoSQL 数据可视化 Redis
Mac安装Redis
Mac安装Redis
368 3
|
7月前
|
人工智能 Rust 自然语言处理
37.1K star!AI模型全能工具箱,这个开源项目让智能体开发更简单!
"Awesome MCP Servers 是当前最全面的模型上下文协议服务器集合,为AI开发者提供开箱即用的工具链支持。通过标准化协议实现AI模型与各类资源的无缝对接,堪称智能体开发的瑞士军刀!"
405 7
|
7月前
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
6月前
|
人工智能 开发框架 前端开发
斩获3K+ star,再见传统开发!这款开源AI后台开发框架让效率提升300%
ruoyi-ai 是基于 ruoyi-plus 框架开发的开源 AI 平台,集成 ChatGPT4、DALL·E-3 和 MidJourney 等前沿模型,提供聊天、绘画、语音克隆等全栈式 AI 能力。其核心价值在于多模态交互与企业级部署支持,开发者可快速搭建智能应用,个人用户亦能轻松体验 AI 创作魅力。项目支持自定义知识库训练、AI 绘画生成、语音克隆、弹幕互动等功能,采用 Java17+SpringBoot3.X 技术栈,前后端分离设计,具备高效性能与扩展性。相比同类项目,ruoyi-ai 提供更丰富的功能组合和企业级管理能力,适用于多种场景需求。
819 3
|
人工智能 监控 安全
基于Raspberry Pi人脸识别自动门
基于Raspberry Pi人脸识别自动门
251 2
|
SQL 关系型数据库 MySQL
mysql密码错误-ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)
这篇文章提供了解决MySQL数据库"Access denied for user 'root'@'localhost' (using password: YES)"错误的方法,通过跳过密码验证、修改root密码,然后重启服务来解决登录问题。
mysql密码错误-ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)
|
安全 Linux
Rocky Linux 或 AlmaLinux 哪个更优秀?
Rocky Linux 或 AlmaLinux 哪个更优秀?
3762 2
|
存储 分布式计算 Apache
Windows环境下安装和配置Zookeeper环境及常见错误解决方案
ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper 的架构通过冗余服务实现高可用性。 本文主要讲解: 1. 如何在Windows环境下搭建和配置Zookeeper 2. Zookeeper配置文件配置与解析 3. 常见错误及解决方案
5682 1
Windows环境下安装和配置Zookeeper环境及常见错误解决方案
|
监控 前端开发 Java
6个顶级SpringCloud微服务开源项目
6个顶级SpringCloud微服务开源项目
834 5
|
IDE 前端开发 Java
IDE报错 NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘
IDE报错 NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘
6863 2