当前位置:首页 > 科技  > 软件

使用 Node.js 和 htmx 构建全栈 CRUD 应用程序

来源: 责编: 时间:2024-03-22 17:42:13 320观看
导读htmx 是一个现代 JavaScript 库,旨在通过实现部分 HTML 更新来增强 Web 应用,而无需重新加载整个页面。与传统前端框架中的 JSON 有效载荷不同,它通过有线方式发送 HTML 来实现这一功能。我们将要构建什么我们将开发一个

htmx 是一个现代 JavaScript 库,旨在通过实现部分 HTML 更新来增强 Web 应用,而无需重新加载整个页面。与传统前端框架中的 JSON 有效载荷不同,它通过有线方式发送 HTML 来实现这一功能。J6T28资讯网——每日最新资讯28at.com

我们将要构建什么

我们将开发一个简单的联系人管理器,能够执行所有 CRUD 操作:创建、读取、更新和删除联系人。通过利用 htmx,该应用程序将提供单页应用程序 (SPA) 的感觉,从而增强交互性和用户体验。J6T28资讯网——每日最新资讯28at.com

如果用户禁用 JavaScript,应用程序将以整页刷新的方式运行,从而保持可用性和可发现性。这种方法展示了 htmx 创建现代 Web 应用程序的能力,同时保持它们的可访问性和 SEO 友好性。J6T28资讯网——每日最新资讯28at.com

这就是我们最终得到的结果。J6T28资讯网——每日最新资讯28at.com

图片图片J6T28资讯网——每日最新资讯28at.com

本文的代码可以在随附的 GitHub 存储库[1]中找到。J6T28资讯网——每日最新资讯28at.com

先决条件

要学习本教程,您需要在 PC 上安装 Node.js。如果您尚未安装 Node,请前往官方 Node 下载页面并获取适合您系统的正确二进制文件。或者,您可能想使用版本管理器安装 Node。这种方法允许您安装多个 Node 版本并在它们之间随意切换。J6T28资讯网——每日最新资讯28at.com

除此之外,熟悉 Node、Pug(我们将使用它们作为模板引擎)和 htmx 会有所帮助,但不是必需的。如果您想复习以上任何内容,请查看我们的教程:使用 Node 构建简单的初学者应用程序[2]、Pug HTML 模板预处理器指南[3]和 htmx 简介[4]。J6T28资讯网——每日最新资讯28at.com

在开始之前,请运行以下命令:J6T28资讯网——每日最新资讯28at.com

node -vnpm -v

您应该看到如下输出:J6T28资讯网——每日最新资讯28at.com

v20.11.110.4.0

这确认了 Node 和 npm 已安装在您的计算机上,并且可以从命令行环境进行访问。J6T28资讯网——每日最新资讯28at.com

设置项目

让我们从搭建一个新的 Node 项目开始:J6T28资讯网——每日最新资讯28at.com

mkdir contact-managercd contact-managernpm init -y

这应该在项目根目录中创建一个 package.json 文件。J6T28资讯网——每日最新资讯28at.com

接下来,让我们安装我们需要的依赖项:J6T28资讯网——每日最新资讯28at.com

npm i express method-override pug

在这些包中,Express 是我们应用程序的支柱。它是一个快速且简约的 Web 框架,提供了一种简单的方法来处理请求和响应,并将 URL 路由到特定的处理函数。 Pug 将充当我们的模板引擎,而我们将使用方法覆盖在客户端不支持的地方使用 HTTP 动词,例如 PUT 和 DELETE。J6T28资讯网——每日最新资讯28at.com

接下来,在根目录中创建一个 app.js 文件:J6T28资讯网——每日最新资讯28at.com

touch app.js

并添加以下内容:J6T28资讯网——每日最新资讯28at.com

const express = require('express');const path = require('path');const routes = require('./routes/index');const app = express();app.set('views', path.join(__dirname, 'views'));app.set('view engine', 'pug');app.use(express.static('public'));app.use('/', routes);const server = app.listen(3000, () => {  console.log(`Express is running on port ${server.address().port}`);});

在这里,我们正在设置 Express 应用程序的结构。这包括将 Pug 配置为渲染视图的视图引擎、定义静态资产的目录以及连接路由器。J6T28资讯网——每日最新资讯28at.com

该应用程序侦听端口 3000,并使用控制台日志来确认 Express 正在运行并准备好处理指定端口上的请求。此设置构成了我们应用程序的基础,并准备好通过更多功能和路由进行扩展。J6T28资讯网——每日最新资讯28at.com

接下来,让我们创建路由文件:J6T28资讯网——每日最新资讯28at.com

mkdir routestouch routes/index.js

打开该文件并添加以下内容:J6T28资讯网——每日最新资讯28at.com

const express = require('express');const router = express.Router();// GET /contactsrouter.get('/contacts', async (req, res) => {  res.send('It works!');});

在这里,我们在新创建的路由目录中设置基本路由。此路由在 /contacts 端点侦听 GET 请求,并使用简单的确认消息进行响应,表明一切正常。J6T28资讯网——每日最新资讯28at.com

接下来,使用以下内容更新 package.json 文件的“scripts”部分:J6T28资讯网——每日最新资讯28at.com

"scripts": {  "dev": "node --watch app.js"},

这利用了 Node.js 中的新监视模式,只要检测到任何更改,该模式就会重新启动我们的应用程序。J6T28资讯网——每日最新资讯28at.com

最后,使用 npm run dev 启动所有内容,然后在浏览器中访问 http://localhost:3000/contacts/。您应该会看到一条消息“It works!”。J6T28资讯网——每日最新资讯28at.com

图片图片J6T28资讯网——每日最新资讯28at.com

激动人心的时刻!J6T28资讯网——每日最新资讯28at.com

显示所有联系人

现在让我们添加一些要显示的联系人。由于我们专注于 htmx,因此为了简单起见,我们将使用硬编码数组。这将使事情变得精简,使我们能够专注于 htmx 的动态功能,而无需复杂的数据库集成。J6T28资讯网——每日最新资讯28at.com

对于那些有兴趣稍后添加数据库的人来说,SQLite 和 Sequelize 是不错的选择,它们提供了不需要单独数据库服务器的基于文件的系统。J6T28资讯网——每日最新资讯28at.com

话虽如此,请将以下内容添加到第一个路由之前的 index.js 中:J6T28资讯网——每日最新资讯28at.com

const contacts = [  { id: 1, name: 'John Doe', email: 'john.doe@example.com' },  { id: 2, name: 'Jane Smith', email: 'jane.smith@example.com' },  { id: 3, name: 'Emily Johnson', email: 'emily.johnson@example.com' },  { id: 4, name: 'Aarav Patel', email: 'aarav.patel@example.com' },  { id: 5, name: 'Liu Wei', email: 'liu.wei@example.com' },  { id: 6, name: 'Fatima Zahra', email: 'fatima.zahra@example.com' },  { id: 7, name: 'Carlos Hernández', email: 'carlos.hernandez@example.com' },  { id: 8, name: 'Olivia Kim', email: 'olivia.kim@example.com' },  { id: 9, name: 'Kwame Nkrumah', email: 'kwame.nkrumah@example.com' },  { id: 10, name: 'Chen Yu', email: 'chen.yu@example.com' },];

现在,我们需要为路由创建一个显示模板。创建一个包含 index.pug 文件的 views 文件夹:J6T28资讯网——每日最新资讯28at.com

mkdir viewstouch views/index.pug

并添加以下内容:J6T28资讯网——每日最新资讯28at.com

doctype htmlhtml  head    meta(charset='UTF-8')    title Contact Manager    link(rel='preconnect', href='https://fonts.googleapis.com')    link(rel='preconnect', href='https://fonts.gstatic.com', crossorigin)    link(href='https://fonts.googleapis.com/css2?family=Roboto:wght@300;400&display=swap', rel='stylesheet')    link(rel='stylesheet', href='/styles.css')  body    header      a(href='/contacts')        h1 Contact Manager    section#sidebar      ul.contact-list        each contact in contacts          li #{contact.name}      div.actions        a(href='/contacts/new') New Contact    main#content      p Select a contact    script(src='https://unpkg.com/htmx.org@1.9.10')

在此模板中,我们为应用程序布置 HTML 结构。在 head 部分,我们包含了来自 Google Fonts 的 Roboto 字体和自定义样式的样式表。J6T28资讯网——每日最新资讯28at.com

正文分为标题、用于列出联系人的侧边栏以及用于存放所有联系信息的主要内容区域。内容区域当前包含一个占位符。在正文的末尾,我们还包含来自 CDN 的最新版本的 htmx 库。J6T28资讯网——每日最新资讯28at.com

该模板期望接收一个联系人数组(在 contacts 变量中),我们在侧边栏中对其进行迭代,并使用 Pug 的插值语法在无序列表中输出每个联系人姓名。J6T28资讯网——每日最新资讯28at.com

接下来,让我们创建自定义样式表:J6T28资讯网——每日最新资讯28at.com

mkdir publictouch public/styles.css

我不想在这里列出样式。请从随附的 GitHub 存储库中的 CSS 文件[5]中复制它们,或者随意添加一些您自己的 CSS 文件。

本文链接:http://www.28at.com/showinfo-26-78654-0.html使用 Node.js 和 htmx 构建全栈 CRUD 应用程序

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Vue 的 style 加了 scoped 也会样式冲突?可怕!

下一篇: 探秘Spring Contract:如何保障您的API符合预期?

标签:
  • 热门焦点
  • 石头自清洁扫拖机器人G10S评测:多年黑科技集大成之作 懒人终极福音

    科技圈经常能看到一个词叫“缝合怪”,用来形容那些把好多功能或者外观结合在一起的产品,通常这样的词是贬义词,但如果真的是产品缝合的好、缝合的实用的话,那它就成了中性词,今
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS网站旨在为全球Office用户提供丰富的高品质原创PPT模板、实用文档、数据图表及个性化定制服务。优点:OfficePLUS是微软官方网站,囊括PPT模板、Word模
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 使用Webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

    1、前言在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
Top