Hapi.js 与 React 实践:构建 Node.js 后台管理系统

前言

在前端领域,React 已经成为了非常流行的框架之一,而在后端领域,Hapi.js 也是备受推崇的 Node.js Web 框架之一。本文主要介绍如何使用 Hapi.js 和 React 实践构建基于 Node.js 的后台管理系统。我们将从搭建项目脚手架开始,完成后台接口的编写和前端页面的开发,最终实现一个完整的后台管理系统。

项目结构

我们的项目目录结构如下所示:

-
--- ------
-   --- ---
-   --- ------
-   --- ------------
-   --- -----------------
-   --- ---
--- ------
-   --- ---
-   --- ------------
-   --- ---
--- ------------
--- ---

可以看到我们将项目分为 clientserver 两个部分,其中 client 目录下存放的是前端代码,server 目录下存放的是后台服务端代码。

后端开发

我们先来看一下后端的实现。在 server 目录下创建 src 目录,然后创建 index.js 文件,代码如下:

---- --------

----- ---- - ----------------
----- ------ - --------------------

----- ---- - ----- -- -- -

    ----- ------ - --- -------------
        ----- -----
        ----- -----------
    ---

    ---------------------

    ----- ---------------
    ------------------- ------- --- ---------------------
--

-------------------------------- ----- -- -

    -----------------
    ----------------
---

-------

这里我们首先引入了 Hapi.js 和我们所编写的路由表,然后创建了一个 Hapi 服务器实例,将路由表交给 server 处理。最后我们使用 server.start() 开启服务,并将服务的监听 url 输出到控制台。

server 目录下创建 routes.js 文件,我们将在这里编写路由。代码如下:

----- ------ - -
    -
        ------- ------
        ----- ---------
        -------- --------- -- -- -

            ------ -
                -
                    --- --
                    ------ ----- ---
                    ------- ------- --
                --
                -
                    --- --
                    ------ ----- ---
                    ------- ------- --
                --
                -
                    --- --
                    ------ ----- ---
                    ------- ------- --
                -
            --
        -
    -
--

-------------- - -------

这里我们定义了一个 GET 请求,路径为 /books,返回了一个包含三本书的 json 数组数据。

到此为止,我们的后台服务端就已经完成了。

前端开发

接下来我们开始前端开发。我们使用了 webpack 和 babel 来搭建前端开发环境,在 client 目录下创建 package.json 文件,添加如下代码:

-
    ------- -------------------
    ---------- --------
    -------------- ---
    ------- -----------
    --------------- -
        ------------- ---------
        -------------- ---------
        ------------------------------------------ ---------
        -------------------- ---------
        ---------------------- ---------
        -------- ----------
        --------------- ---------
        -------- ----------
        ------------ ----------
        ---------- ----------
        -------------- ---------
        --------------------- --------
    --
    ---------- -
        -------- ------------------- --------
        -------- -------- ------ -----------
    --
    --------- ---
    ---------- -----
-

这里我们添加了一些必要的依赖,包括 React、axios、webpack 等等。然后添加了两个脚本命令, start 开启开发环境,build 打包生产环境代码。

client 目录下创建 webpack.config.js 文件,添加如下代码:

----- ---- - ----------------

-------------- - -
    ------ ------------------
    ------- -
        --------- ------------
        ----- ----------------------- ---------
    --
    ---------- -
        ------------ ----------
    --
    ------- -
        ------ -
            -
                ----- ----------
                -------- ---------------
                ---- -
                    ------- --------------
                -
            -
        -
    -
--

这里我们设置了入口文件为 src/index.jsx,打包后的文件名为 bundle.js,打包后的文件输出到 public 目录下。同时我们设置了devServer 的 contentBasepublic,然后配置了 babel 和 jsx loader。

client 目录下创建 public/index.html 文件,添加如下代码:

--------- -----
------
------
    ------------ ---- -------------
-------
------
---- ----------------
------- -------------------------
-------
-------

这里我们指定了打包后的 js 文件 public/bundle.js,并将其导入到 html 网页中。

接下来,我们在 client/src 目录下创建 index.jsx 文件,添加如下代码:

------ ----- ---- --------
------ -------- ---- ------------
------ ----- ---- --------

----- --- ------- --------------- -
    ----- - -
        ------ --
    --

    ------------------- -
        ----------------
    -

    ----- ---------- -
        --- -
            ----- -------- - ----- --------------------
            --------------- ------ ------------- ---
        - ----- ------- -
            ---------------------
        -
    -

    -------- -
        ----- - ----- - - -----------
        ------ -
            -----
                -------- ---------
                ----
                    --------------- -- -
                        --- --------------
                            ---------------------
                            --------------------
                        -----
                    ---
                -----
            ------
        --
    -
-

-------------------- --- ---------------------------------

这里我们使用了 React,通过 import 引入了 React、ReactDOM 和 axios 依赖库。在 App 组件中,我们使用了 componentDidMount 方法来获取从后台返回的书籍列表。然后将获取到的书籍渲染到页面中。

运行项目

server 目录下打开终端,执行 npm init -y 命令来初始化 server 项目,然后执行以下命令:

--- ------- ----
--- ------- -- -------

这里我们安装了 hapi 和 nodemon,nodemon 是 Node.js 开发中的热更新插件,可以自动重启服务。

接下来,在 client 目录下执行以下命令:

--- -------

这里我们安装了项目依赖的所有库。

最后,在 server 目录下执行以下命令:

--- ------- ------------

用 nodemon 启动服务,然后在 client 目录下执行以下命令:

--- -----

然后在浏览器中打开 http://localhost:8080,就可以看到我们刚刚编写的前端页面了。

总结

本文通过实例介绍了如何使用 Hapi.js 和 React 实践构建 Node.js 后台管理系统。我们首先搭建了项目脚手架,然后通过 Hapi.js 实现了后台服务,最后使用 React 完成了前端页面的开发。本文并没有涉及到具体的业务场景,但可以作为一个基础框架,供大家进行拓展和修改。通过这个实例,我们可以更加深入了解 Hapi.js 和 React,掌握前后端分离的开发方式。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6491465a48841e9894f45c5e


猜你喜欢

  • RxJS 中的四种状态管理方式

    RxJS 中的四种状态管理方式 前端开发中,状态管理是非常重要的一个概念。状态管理涉及到如何管理应用程序的数据、业务逻辑和 UI 状态等内容。在 RxJS 中,有四种常见的状态管理方式:Subject...

    1 年前
  • Web Components 中如何处理自定义事件冲突?

    简介 Web Components 是指一组浏览器特性,它们可以让开发者构建可重用、可组合的组件。其中自定义事件是 Web Components 中的一个重要特性,它可以让我们在组件中自定义事件,以实...

    1 年前
  • SPA 应用中实现多语言的技巧

    前言 随着全球化的发展,多语言成为了Web应用中不可或缺的功能。本文将为大家介绍在SPA应用中如何实现多语言。 第一步:准备工作 在进行多语言开发前,我们需要先准备好多种语言版本的文本资源文件。

    1 年前
  • 如何快速利用 Custom Elements 实现常见的 UI 组件

    在前端开发中,对于 UI 组件的开发、维护和管理是一个重要的部分。随着 Web Components 的发展,Custom Elements 成为了其中的一个核心概念。

    1 年前
  • Redis 缓存雪崩问题如何应对?

    在 web 应用开发中,Redis 缓存被广泛使用,它可以有效减轻后端数据存储和查询的负载,提高系统的性能。但是,在实际应用中,我们可能会遇到一些问题,例如当 Redis 缓存中的大量数据同时失效或者...

    1 年前
  • Angular 应用程序中的性能最佳实践

    Angular 是当前前端开发领域最热门的框架之一,它是由 Google 所研发并维护的开源项目。Angular 框架提供了许多强大的功能和工具,以及丰富的生态系统。

    1 年前
  • 如何在 SASS 中使用 @import 关键字

    简介 SASS(Syntactically Awesome Style Sheets)是一种基于 CSS 的 CSS 预处理器,它提供了许多在 CSS 中不可用的功能,例如嵌套规则、变量、混合、继承等...

    1 年前
  • Node.js 中使用 Supertest 进行接口测试

    对于前端开发人员来说,接口测试是非常重要的一环。接口测试可以帮助我们在开发阶段排查问题,保证代码的质量,提高系统的可靠性。而在 Node.js 应用中,使用 Supertest 这一测试框架可以更加方...

    1 年前
  • 如何在 Vue.js 项目中使用 ESLint

    ESLint 是一个流行的 JavaScript 代码静态分析工具,可以帮助开发人员发现代码中常见的问题,从而提高代码质量和可维护性。在 Vue.js 项目中使用 ESLint 可以进一步加强代码规范...

    1 年前
  • ES9 中的异步迭代详解

    在前端开发中,异步编程已经成为了一种必备的技能。ES9 引入的异步迭代正是为了简化异步编程而生。本文将对 ES9 中的异步迭代进行详细介绍,希望对读者深入理解异步编程有所帮助。

    1 年前
  • Fastify 性能优化:使用 fastify-rate-limit 插件进行流量控制

    对于前端开发人员,编写高性能应用程序是最重要的任务之一。Fastify 是一个快速,低开销的 Web 框架,因此与其他 Web 框架相比,在性能方面有很高的优势。但是,当并发请求增加时,仍然需要有效地...

    1 年前
  • 用 Deno 打造符合 Web Components 规范的组件库

    前言 Web 组件是一种使用 HTML、CSS 和 JavaScript 来构建可复用的自定义元素的技术,可以帮助我们将页面上的各种交互性和 UI 元素封装为独立的、可复用的组件,从而提高代码的组织性...

    1 年前
  • GraphQL 的节点接口与安全限制实现优化

    GraphQL 是一种用于构建 API 的查询语言,它具有高度的灵活性和可定制性,而且在很多情况下比传统的 RESTful API 更加高效和易于使用。本文将重点介绍 GraphQL 中的节点接口和安...

    1 年前
  • Server-sent Events 在实时数据传输中的最佳实践

    随着实时数据传输的需求日益增加,Server-sent Events(API 简称为 SSE) 逐渐成为前端开发中的一种流行解决方案。它可以轻松地实现服务器到客户端的实时数据推送,无需客户端的持续连接...

    1 年前
  • PM2 实现 Node.js 集群部署的攻略

    什么是 PM2? PM2 是一个 Node.js 进程管理器,使用它可以轻松地管理你的 Node.js 应用程序。PM2 可以监控你的应用程序并在发生错误时自动重启,还可以设置自动重启策略、负载均衡器...

    1 年前
  • ECMAScript 2021 中的 class 静态类成员详解

    在 ECMAScript 2021 中,class 静态类成员是一项非常重要的特性。静态类成员是指那些与实例无关的类成员,它们只与类本身有关,可以理解为类级别的数据和函数。

    1 年前
  • Mocha + Chai + React 测试

    什么是 Mocha + Chai + React 测试 Mocha + Chai + React 是一种前端测试框架,主要用于测试 React 组件的正确性。其中 Mocha 是一个 JavaScri...

    1 年前
  • Serverless 和移动开发的相互影响

    前言 Serverless 是一种新的构建和部署应用程序的方法,它允许开发者编写代码而不用关心底层基础架构的细节。它具有简单、灵活和高效的特点,因此受到越来越多的开发者关注和青睐。

    1 年前
  • Node.js 与 Headless CMS 的集成

    随着互联网技术的不断发展,网站已经成为人们生活中不可或缺的一部分。对于一些需要频繁更新内容的网站来说,后台内容管理系统(CMS)则显得尤为重要。传统的 CMS 系统包含了前后端两部分,前端负责展示数据...

    1 年前
  • 无障碍技术与 Web 安全的关系及应对策略

    前言 随着互联网的快速发展,Web 已经成为人们获取信息、交流、社交、购物等的主要方式。而随之而来的是对网络安全的高度关注和保护,以及对让所有人都能平等地使用 Web 的要求。

    1 年前

相关推荐

    暂无文章