Hapi.js 分步教程

Hapi.js 是 Node.js 平台上的一个 web 应用程序框架,它的设计目标是提供一种易于理解和使用的工具,帮助开发人员快速创建可靠的 web 应用程序。

本篇文章将为大家提供 Hapi.js 的入门指南,帮助大家了解如何使用它来构建一个简单的 web 应用程序。以下是我们将要涉及到的主题:

  • 安装和配置 Hapi.js
  • 创建路由和处理程序
  • 使用插件扩展 Hapi.js
  • 设置静态文件服务
  • 处理错误和异常

安装和配置 Hapi.js

要使用 Hapi.js,首先需要安装 Node.js 和 npm。然后,在项目目录下执行以下命令来安装 Hapi.js:

安装完成后,在应用程序的入口文件中引入 Hapi.js,创建一个 Hapi.js 实例并启动它:

const Hapi = require('hapi');
const server = new Hapi.Server({
    port: 3000,
    host: 'localhost'
});

async function start() {
    await server.start();
    console.log(`Server running at: ${server.info.uri}`);
}

start();

这里我们使用了 ES2017 异步函数来启动 Hapi.js 服务器,并在控制台输出启动信息。现在,打开浏览器,访问 http://localhost:3000 可以看到默认的 Hapi.js 欢迎页面。

创建路由和处理程序

在 Hapi.js 中,路由是将 URL 请求映射到对应的处理程序的机制。在上面的示例中,我们可以看到在创建 Hapi.js 实例时,指定了服务器的端口号和主机名,这就是我们将要监听的地址。

现在,我们可以开始创建我们的第一个路由。使用 server.route() 方法来定义路由和对应的处理程序:

server.route({
    method: 'GET',
    path: '/',
    handler: (request, h) => {
        return 'Hello, Hapi.js!';
    }
});

在这里,我们定义了根路由 /,并指定了 GET 请求的处理程序。处理程序是一个异步函数,我们从 request 参数中获取了请求相关的信息,从 h 参数中获取了 Hapi.js 工具集,最后返回了一个字符串作为响应内容。

在浏览器中访问根路由时,将看到以下内容:

使用插件扩展 Hapi.js

Hapi.js 支持使用插件来扩展其功能。可以使用 server.register() 方法向应用程序添加插件:

const Vision = require('vision');
const Handlebars = require('handlebars');

await server.register(Vision);
server.views({
    engines: {
        html: Handlebars
    },
    relativeTo: __dirname,
    path: 'views'
});

server.route({
    method: 'GET',
    path: '/hello/{name}',
    handler: (request, h) => {
        const name = request.params.name || 'World';
        return h.view('hello', { name });
    }
});

在这里,我们使用了两个插件:Vision 和 Handlebars。Vision 是一个 Hapi.js 插件,用于呈现视图。Handlebars 是一个 JavaScript 模板引擎,用于呈现 HTML。

在加载插件后,我们使用 server.views() 方法来定义视图引擎。然后,我们创建了一个 HELLO 路由,它将接受一个名为 name 的参数,并使用 Handlebars 视图引擎将其呈现为一个 HTML 页面。访问 http://localhost:3000/hello/Jane 时,将看到以下内容:

设置静态文件服务

Hapi.js 也支持为应用程序提供静态文件服务。可以使用 inert 插件来实现这一功能:

const Inert = require('inert');

await server.register(Inert);

server.route({
    method: 'GET',
    path: '/public/{param*}',
    handler: {
        directory: {
            path: 'public'
        }
    }
});

我们使用 server.register() 方法加载 inert 插件,然后创建一个路由,它将匹配所有的 /public/* 请求,并返回一个指定目录下的静态文件。

在本例中,我们将网站的静态文件放在了 public 目录下,访问 http://localhost:3000/public/index.html 时,将看到网站的首页。

处理错误和异常

在应用程序开发中,错误和异常处理是非常重要的一环。对于 Hapi.js 应用程序,可以使用 h 工具集中提供的方法来处理异常和错误。例如:

server.ext('onPreResponse', (request, h) => {
    const response = request.response;

    if (response.isBoom) {
        console.log(`An error occurred: ${response.output.statusCode} - ${response.output.payload.message}`);
    }

    return h.continue;
});

在这里,我们使用 server.ext() 方法注册了一个前置处理程序,它将在返回响应之前执行。在处理程序中,如果响应是一个 Boom 对象,则将抛出一个错误并输出错误信息。通过这种方式,我们可以在发生错误的情况下保证应用程序的稳定性,避免出现未处理的异常。

总结

通过本文,我们了解了 Hapi.js 的基本使用方式,包括安装和配置、创建路由和处理程序、使用插件扩展 Hapi.js、设置静态文件服务以及处理错误和异常。我们希望本篇文章能对大家有所帮助,在使用 Hapi.js 时更加自信和有效。完整示例代码可以参考以下链接:

https://github.com/hapijs/hapi

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65935247eb4cecbf2d803219


纠错反馈