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

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

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

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

我们将要构建什么

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

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

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

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

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

先决条件

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

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

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

node -vnpm -v

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

v20.11.110.4.0

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

设置项目

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

mkdir contact-managercd contact-managernpm init -y

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

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

npm i express method-override pug

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

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

touch app.js

并添加以下内容:X4228资讯网——每日最新资讯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 配置为渲染视图的视图引擎、定义静态资产的目录以及连接路由器。X4228资讯网——每日最新资讯28at.com

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

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

mkdir routestouch routes/index.js

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

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

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

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

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

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

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

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

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

显示所有联系人

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

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

话虽如此,请将以下内容添加到第一个路由之前的 index.js 中:X4228资讯网——每日最新资讯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 文件夹:X4228资讯网——每日最新资讯28at.com

mkdir viewstouch views/index.pug

并添加以下内容:X4228资讯网——每日最新资讯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 字体和自定义样式的样式表。X4228资讯网——每日最新资讯28at.com

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

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

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

mkdir publictouch public/styles.css

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

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

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

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

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

标签:
  • 热门焦点
  • 三言两语说透设计模式的艺术-简单工厂模式

    三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 如何通过Python线程池实现异步编程?

    如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • 一个注解实现接口幂等,这样才优雅!

    一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 每天一道面试题-CPU伪共享

    每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 当家的盒马,加速谋生

    当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己“当家”的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起“冯提莫”这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的“斗鱼一姐”,冯提莫在游戏直播的年代影响力不输于现
  • 华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 最薄的14英寸游戏笔记本电脑  Alienware X14已可以购买

    最薄的14英寸游戏笔记本电脑 Alienware X14已可以购买

    2022年1月份在国际消费电子展(CES2022)上首次亮相的Alienware新品——Alienware X14现在已经可以购买了,这款笔记本电脑被誉为世界上最薄的 14 英寸游戏笔
  • 电博会与软博会实现

    电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top
Baidu
map