使用 Node.js、Express 和 React 构建强大的 API

了解如何使用 Node.js、Express 和 React 创建一个强大且动态的 API。这个综合指南将引导你从设置开发环境开始,到集成 React 前端,并利用 APIPost 进行高效的 API 测试。无论你是初学者还是经验丰富的开发者,这篇文章都适合你。

今天,我们将深入探索 Node.js、Express 和 React 的精彩世界。无论你是经验丰富的程序员还是刚入门的开发者,本博客将引导你使用这些流行的技术构建一个强大的 API。我们将从基础开始,逐步设置开发环境,了解这些工具是如何协同工作的。此外,我们还将展示如何利用 APIPost 让你的工作更加轻松。所以,拿起你最爱的编程小零食,跟着我们一起开始吧!

为什么选择 Node.js、Express 和 React?

在开始编写代码之前,让我们先讨论一下为什么这些技术值得你关注。

Node.js

Node.js 是一个让你在服务器端运行 JavaScript 的运行时环境。它基于 Chrome 的 V8 JavaScript 引擎,具有高效快速的特点。使用 Node.js,你可以构建可扩展的网络应用程序,处理多个请求,同时使用单一的编程语言(JavaScript)进行客户端和服务器端开发。

image.png

Express

Express 是一个轻量级且灵活的 Node.js Web 应用框架。它为构建 Web 和移动应用程序提供了一套强大的功能。使用 Express,你可以轻松地设置服务器、管理路由并处理 HTTP 请求和响应。它是许多 Node.js 应用程序的核心,与 React 配合使用时效果尤为出色。

image.png

React

React 是一个用于构建用户界面的 JavaScript 库,由 Facebook 和一个社区维护。React 允许你创建可重用的 UI 组件,并高效地管理应用程序的状态。与 Node.js 和 Express 配合使用时,你可以轻松构建动态、响应式的 Web 应用程序。

image.png

设置开发环境

让我们开始设置开发环境,以下是逐步指南:

  1. 安装 Node.js:前往 Node.js 官网 下载最新版本,并根据操作系统的要求进行安装。

  2. 安装 npm:npm(Node 包管理器)是与 Node.js 一起安装的。你可以通过在终端中运行 npm -v 来检查它是否已经安装。

  3. 创建新项目:为你的项目创建一个新目录,并在终端中进入该目录。运行 npm init 初始化一个新的 Node.js 项目,按照提示创建一个 package.json 文件。

  4. 安装 Express:运行 npm install express 安装 Express。

  5. 安装 React:使用 Create React App 来设置一个新的 React 项目。运行 npx create-react-app client 在 client 目录中创建一个新的 React 应用。

  6. 安装 APIPost:为了简化 API 开发和测试,我们将使用 APIPost。你可以从 APIPost 官网 免费下载并进行集成。

使用 Node.js 和 Express 构建 API

环境设置好之后,让我们用 Node.js 和 Express 构建一个简单的 API。

第一步:设置 Express 服务器

在项目的根目录中创建一个名为 server.js 的文件,并添加以下代码来设置一个基础的 Express 服务器:

const express = require('express');
const app = express();
const port = 3000;app.get('/', (req, res) => {res.send('Hello World!');
});app.listen(port, () => {console.log(`Server running at http://localhost:${port}`);
});

在终端中运行 node server.js。你应该看到 "Server running at http://localhost:3000"。然后打开浏览器并访问 http://localhost:3000,你会看到 "Hello World!"。

第二步:创建 API 路由

接下来,我们来创建一些 API 路由。在 server.js 文件中,添加以下代码来创建一个返回书籍列表的简单 API:

const books = [{ id: 1, title: '1984', author: 'George Orwell' },{ id: 2, title: 'To Kill a Mockingbird', author: 'Harper Lee' },{ id: 3, title: 'The Great Gatsby', author: 'F. Scott Fitzgerald' }
];app.get('/api/books', (req, res) => {res.json(books);
});

现在,当你访问 http://localhost:3000/api/books 时,会看到一个包含书籍列表的 JSON 响应。

第三步:连接数据库

为了使我们的 API 更加动态,我们将连接一个数据库。在本示例中,我们使用 MongoDB。首先,通过运行 npm install mongoose 安装 Mongoose。

创建一个名为 db.js 的新文件,并添加以下代码以连接到 MongoDB:

const mongoose = require('mongoose');mongoose.connect('mongodb://localhost:27017/library', {useNewUrlParser: true,useUnifiedTopology: true
});const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', () => {console.log('Connected to MongoDB');
});module.exports = db;

在 server.js 文件中,引入 db.js 文件以连接数据库:

const db = require('./db');

接下来,我们创建一个 Mongoose 模型来存储书籍。创建一个名为 book.js 的新文件,并添加以下代码:

const mongoose = require('mongoose');const bookSchema = new mongoose.Schema({title: String,author: String,
});const Book = mongoose.model('Book', bookSchema);module.exports = Book;

在 server.js 文件中,更新 /api/books 路由以从数据库中获取书籍:

const Book = require('./book');app.get('/api/books', async (req, res) => {const books = await Book.find();res.json(books);
});

现在,你可以在 MongoDB 数据库中添加、更新和删除书籍,并且 API 将动态反映这些更改。

将 React 与 Node.js 和 Express 集成

现在我们已经设置好了 API,让我们将其与 React 前端集成。

第一步:设置代理

为了让 React 前端向 API 发出请求,我们需要设置代理。打开 client/package.json 文件,添加以下内容:

"proxy": "http://localhost:3000"

第二步:从 API 获取数据

在你的 React 应用中,让我们创建一个组件来从 API 获取数据并显示它。打开 client/src/App.js 文件,并将其内容替换为以下代码:

import React, { useEffect, useState } from 'react';
import './App.css';function App() {const [books, setBooks] = useState([]);useEffect(() => {fetch('/api/books').then(response => response.json()).then(data => setBooks(data));}, []);return (<div className="App"><h1>Books</h1><ul>{books.map(book => (<li key={book.id}>{book.title} by {book.author}</li>))}</ul></div>);
}export default App;

在 client 目录中运行 npm start 启动 React 开发服务器,你应该能看到从 API 获取到的书籍列表显示在页面上。

使用 APIPost 进行高效的 API 测试

API 开发离不开适当的测试。APIPost 通过其用户友好的界面和强大的功能简化了测试过程。通过使用 APIPost,你可以快速测试你的端点、验证响应并自动化测试过程。访问 APIPost 官网 下载并将其集成到你的 API 开发工作流中,享受更加流畅高效的体验。

1. 设置 APIPost 📋

利用 APIPost 测试和比较优化前后的网页加载时间,帮助你有效识别性能改进。

curl -w "@curl-format.txt" -o /dev/null -s "https://apipost.example.com/page"

2. 分析响应时间 📉

在优化前后,测量并记录响应时间,以量化性能提升。这一步可以突出优化如何改善加载速度。

3. 使用 CI/CD 自动化测试 ⚙️

将 APIPost 集成到你的持续集成/持续部署(CI/CD)管道中,持续监控页面加载性能,快速识别回归问题。确保在所有更新中,性能始终保持最佳。

示例 curl-format.txt:

apipost run "https://open.apipost.cn/open/ci/automated_testing?ci_id=MjE4MDIzMzg1MTk5MTY1NDQwOjEwMjUzNjYzNTA2NjIwNDE5OjEzMTI1Nzk3MzQyMzcxODk5&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoyMTgwMjMzODUxMTUyNzkzNjAsImlzcyI6ImFwaXBvc3QiLCJleHAiOjE3MjYyOTI2MzJ9.429eP2JlEApWAWCCK6zqy3HoKYHPNRq7LK95xde-Tro" -r html

通过将 APIPost 纳入你的工具链,你可以确保网页始终具有卓越的性能,为用户提供流畅高效的体验。

结论

恭喜!你已经成功使用 Node.js、Express 和 React 构建了一个强大的 API。你学会了如何设置开发环境、创建 API 路由、连接数据库以及将 React 集成到后端中。同时,你也了解了如何利用 APIPost 简化 API 测试。

记住,这只是一个开始。你可以通过添加身份验证、实现更复杂的路由和增强前端功能来扩展和优化你的应用。祝编程愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/77066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧声防:构筑海滨浴场安全屏障的应急广播系

海滨浴场是夏季旅游的热门目的地&#xff0c;但潮汐变化、离岸流、突发天气、溺水事故等安全隐患时刻威胁着游客安全。传统的安全管理依赖人工瞭望和喊话&#xff0c;存在覆盖范围有限、响应速度慢等问题。“智慧声防”应急广播系统&#xff0c;通过智能化、网络化、多场景协同…

Redis之缓存穿透

Redis之缓存穿透 文章目录 Redis之缓存穿透一、什么是缓存穿透&#xff1f;二、缓存穿透常见的解决方案1. 缓存空对象&#xff08;Null Caching&#xff09;2. 布隆过滤器&#xff08;Bloom Filter&#xff09;​3. 互斥锁&#xff08;Mutex Lock&#xff09;​4. 接口层校验5.…

【蓝桥杯】颜色平衡树

思路 颜色平衡树&#xff0c;即子树中的节点颜色均匀分布。所以要确认一个子树是否为颜色平衡树&#xff0c;需要得到它的所有节点的颜色&#xff0c;也就是要深搜它所有的子树。 这个想法就很标准的启发式合并了&#xff0c;何为启发式合并&#xff1f;简单来说&#xff0c;…

自动化测试工具playwright中文文档-------14.Chrome 插件

介绍 注意 插件仅在以持久化上下文启动的 Chrome/Chromium 浏览器中工作。请谨慎使用自定义浏览器参数&#xff0c;因为其中一些可能会破坏 Playwright 的功能。 以下是获取位于 ./my-extension 的 Manifest v2 插件背景页面句柄的代码示例。 from playwright.sync_api imp…

让 Python 脚本在后台持续运行:架构级解决方案与工业级实践指南

让 Python 脚本在后台持续运行&#xff1a;架构级解决方案与工业级实践指南 一、生产环境需求全景分析 1.1 后台进程的工业级要求矩阵 维度开发环境要求生产环境要求容灾要求可靠性单点运行集群部署跨机房容灾可观测性控制台输出集中式日志分布式追踪资源管理无限制CPU/Memo…

MyBatis 详解

1. 什么是 MyBatis&#xff1f; MyBatis 是一款优秀的 持久层框架&#xff0c;它通过 XML 或注解配置&#xff0c;将 Java 对象&#xff08;POJO&#xff09;与数据库操作&#xff08;SQL&#xff09;进行灵活映射&#xff0c;简化了 JDBC 的复杂操作。 核心思想&#xff1a;S…

循环神经网络 - 深层循环神经网络

如果将深度定义为网络中信息传递路径长度的话&#xff0c;循环神经网络可以看作既“深”又“浅”的网络。 一方面来说&#xff0c;如果我们把循环网络按时间展开&#xff0c;长时间间隔的状态之间的路径很长&#xff0c;循环网络可以看作一个非常深的网络。 从另一方面来 说&…

GoLand 标红但程序可正常运行:由符号索引缓存失效引起的假报错问题

问题描述&#xff1a; 在 GoLand 中&#xff0c;api/tls.go 文件中引用了 api/type.go 中定义的结构体 Options&#xff0c;但 GoLand 把 Options 标红显示为未定义&#xff08;undefined symbol&#xff09;&#xff0c;尽管程序实际可以正常编译和运行&#xff08;go build /…

python-各种文件(txt,xls,csv,sql,二进制文件)读写操作、文件类型转换、数据分析代码讲解

1.文件txt读写标准用法 1.1写入文件 要读取文件&#xff0c;首先得使用 open() 函数打开文件。 file open(file_path, moder, encodingNone) file_path&#xff1a;文件的路径&#xff0c;可以是绝对路径或者相对路径。mode&#xff1a;文件打开模式&#xff0c;r 代表以…

Uniapp:确认框

目录 一、 出现场景二、 效果展示三、具体使用 一、 出现场景 在项目的开发中&#xff0c;会经常出现删除数据的情况&#xff0c;如果直接删除的话&#xff0c;可能会存在误删&#xff0c;用户体验不好&#xff0c;所以需要增加一个消息提示&#xff0c;提醒用户是否删除。 二…

解密 Vue 打包策略

1. 总体概述 在现代前端开发中&#xff0c;Vue 已成为流行框架之一&#xff0c;开发者通常使用 webpack、vite 或 vue-cli 来构建项目。可能会困惑&#xff1a; 为什么源码中的资源引用路径与打包后实际产出的路径会不一样&#xff1f;静态路径与动态路径到底如何正确书写&am…

Golang|接口并发测试和压力测试

文章目录 这里出现某些奖品和数据库中库存量不一致的问题原因就是在并发的情况下&#xff0c;sync.Map仍然会出现脏写问题&#xff0c;就是在同时操作下的操作覆盖问题可以先把数据放到channel里&#xff0c;然后用一个单一的协程负责读取channel并写入map

CentOS下,Xftp中文文件名乱码的处理方式

乱码原因 中文版Windows默认使用GBK编码&#xff0c;现代Linux发行版&#xff08;如CentOS、Ubuntu等&#xff09;默认使用UTF-8编码。Windows下正常的编码&#xff0c;可能在linux下无法识别&#xff0c;例如&#xff1a;Windows的GBK字节0xD6D0被Linux用UTF-8解码时&#xf…

解决 Vue 中 input 输入框被赋值后,无法再修改和编辑的问题

目录 需求&#xff1a; 出现 BUG&#xff1a; Bug 代码复现 解决问题&#xff1a; 解决方法1&#xff1a; 解决方法2 关于 $set() 的补充&#xff1a; 需求&#xff1a; 前段时间&#xff0c;接到了一个需求&#xff1a;在选择框中选中某个下拉菜单时&#xff0c;对应的…

【含文档+PPT+源码】基于微信小程序的卫生院预约挂号管理系统的设计与实现

项目视频介绍&#xff1a; 毕业作品基于微信小程序的卫生院预约挂号管理系统的设计与实现 课程简介&#xff1a; 本课程演示的是一款基于微信小程序的卫生院预约挂号管理系统的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习…

【Vue】案例——To do list:

【Vue】案例——To do list&#xff1a; 一、案例介绍&#xff1a;二、效果展示&#xff08;如图&#xff09;三、主要功能&#xff1a;四、技术要点&#xff1a;补充&#xff1a;【Vue】Vue模板语法(点击可跳转)补充&#xff1a;【Vue】数据绑定&#xff08;单双向&#xff09…

导入 .sql 文件到 云服务器上的MySQL中

导入 .sql 文件到 云服务器上的MySQL中 步骤 1&#xff1a;确保 .sql 文件已上传到云服务器步骤 2&#xff1a;登录到云服务器步骤 3&#xff1a;检查文件是否成功传输步骤 4&#xff1a;登录 MySQL步骤 5&#xff1a;创建空数据库&#xff08;如果尚未创建&#xff09;步骤 6&…

我的机器学习之路(初稿)

文章目录 一、机器学习定义二、核心三要素三、算法类型详解1. 监督学习&#xff08;带标签数据&#xff09;2. 无监督学习&#xff08;无标签数据&#xff09;3. 强化学习&#xff08;决策优化&#xff09;(我之后主攻的方向) 四、典型应用场景五、学习路线图六、常见误区警示七…

VueDOMPurifyHTML 防止 ​​XSS(跨站脚本攻击)​​ 风险

VueDOMPurifyHTML 是一个 ​​Vue.js 插件​​&#xff0c;用于在 v-html 指令中安全地渲染 HTML 内容&#xff0c;防止 ​​XSS&#xff08;跨站脚本攻击&#xff09;​​ 风险。 ​​作用​​ ​​解决 v-html 的安全问题​​ Vue 的 v-html 会直接渲染原始 HTML&#xff0…

【数据结构】之散列

一、定义与基本术语 &#xff08;一&#xff09;、定义 散列&#xff08;Hash&#xff09;是一种将键&#xff08;key&#xff09;通过散列函数映射到一个固定大小的数组中的技术&#xff0c;因为键值对的映射关系&#xff0c;散列表可以实现快速的插入、删除和查找操作。在这…