当前位置: 首页 > article >正文

使用 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 测试。

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

相关文章:

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

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

深度学习入门:神经网络的学习

目录 1 从数据中学习1.1 数据驱动1.2 训练数据和测试数据 2损失函数2.1 均方误差2.2 交叉熵误差2.3 mini-batch学习2.4 mini-batch版交叉熵误差的实现2.5 为何要设定损失函数 3 数值微分3.1 数值微分3.3 偏导数 4 梯度4.1 梯度法4.2 神经网络的梯度 5 学习算法的实现5.1 2层神经…...

OSI参考模型和TCP/IP模型

1.OSI参考模型 OSI模型&#xff1a; OSI参考模型有7层&#xff0c;自下而上依次为物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;会话层&#xff0c;表示层&#xff0c;应用层。&#xff08;记忆口诀&#xff1a;物联网叔会用&#xff09;。低…...

人工智能中的卷积神经网络(CNN)综述

文章目录 前言 1. CNN的基本原理 1.1 卷积层 1.2 池化层 1.3 全连接层 2. CNN的发展历程 2.1 LeNet-5 2.2 AlexNet 2.3 VGGNet 2.4 ResNet 3. CNN的主要应用 3.1 图像分类 3.2 目标检测 3.3 语义分割 3.4 自然语言处理 4. 未来研究方向 4.1 模型压缩与加速 4.2 自监督学习 4.3 …...

WordPress - 此站点出现严重错误

本篇讲 当WordPress出现 此站点出现严重错误 时&#xff0c;该如何解决。 目录 1&#xff0c;现象 2&#xff0c; FAQ 3&#xff0c;管理Menu无法打开 下面是详细内容。 1&#xff0c;现象 此站点出现严重错误&#xff08;このサイトで重大なエラーが発生しました&#x…...

力扣每日打卡 1534. 统计好三元组 (简单)

力扣 1534. 统计好三元组 简单 前言一、题目内容二、解题方法1. 暴力解法2.官方题解2.1 方法一&#xff1a;枚举2.2 方法二&#xff1a;枚举优化 前言 这是刷算法题的第十二天&#xff0c;用到的语言是JS 题目&#xff1a;力扣 1534. 统计好三元组 (简单) 一、题目内容 给你一…...

《Vue3学习手记2》

今天主要学习Vue3中的数据监视&#xff1a; ps: 代码中的注释写的很详细&#xff0c;这样更有利于理解 watch 作用: 监视数据的变化(和Vue2中watch作用一致) 特点: Vue3中的watch只能监视以下四种数据: ref创建定义的数据&#xff08;基本类型、对象类型&#xff09;reactiv…...

在pycharm中搭建yolo11分类检测系统1--PyQt5学习(一)

实验条件&#xff1a;pycharm24.3autodlyolov11环境PyQt5 如果pycharm还没有配PyQt5的话就先去看我原先写的这篇博文&#xff1a; PyQT5安装搭配QT DesignerPycharm&#xff09;-CSDN博客 跟练参考文章&#xff1a; 目标检测系列&#xff08;四&#xff09;利用pyqt5实现yo…...

【经验记录贴】使用配置文件提高项目的可维护性

mark一下。 整体修改前后如下&#xff1a; 课题&#xff1a; 在项目中有一个支持的文件类型的FILE_TYPE的定义&#xff0c; 这个是写死在主程序中&#xff0c;每次增加可以支持的文件类型的时候&#xff0c;都需要去修改主程序中这个FILGE_TYPE的定义。 主程序修改其实不太花时…...

从JSON到SQL:基于业务场景的SQL生成器实战

引言 在数据驱动的业务场景中&#xff0c;将业务需求快速转化为SQL查询是常见需求。本文将通过一个轻量级的sql_json_to_sql函数&#xff0c;展示如何将JSON格式的查询描述转换为标准SQL语句&#xff0c;并结合实际业务场景验证其功能。 核心代码解析 1. 代码实现 def sql_j…...

空格键会提交表单吗?HTML与JavaScript中的行为解析

在网页开发中&#xff0c;理解用户交互细节对于提供流畅的用户体验至关重要。一个常见的问题是&#xff1a;空格键是否会触发表单提交&#xff1f;本文将通过一个简单的示例解释这一行为&#xff0c;并探讨如何使用HTML和JavaScript来定制这种交互。 示例概览 考虑以下HTML代…...

06 - 多线程-JUC并发编程-原子类(二)

上一章&#xff0c;讲解java &#xff08;java.util.concurrent.atomic&#xff09; 包中的 支持基本数据类型的原子类&#xff0c;以及支持数组类型的原子类&#xff0c;这一章继续讲解支持对实体类的原子类&#xff0c;以及原子类型的修改器。 还有最后java &#xff08;java…...

vue3 实现谷歌登录

很多人都是直接在 index.html 文件中引入的&#xff0c;刚开始我也那样写但是谷歌的api只能调起一次后续就不会生效了 我的登录是个弹窗&#xff0c;写在app.vue 文件中 const isGoogleLoaded ref(true);onMounted(async () > {initialize(); }); // 初始化 const initi…...

SOME/IP中”客户端消费“及”服务端提供”的解析

先上结论 AREthAddConsumedEventGroup-->客户端的函数-->谁调用 Consumed函数&#xff0c;谁就是消费者 AREthAddProvidedEventGroup-->服务端的函数-->谁调用 Provided函数&#xff0c;谁就是服务端 Server 端&#xff1a;AREthAddProvidedEventGroup → 声明 &…...

GO语言入门:字符串处理1(打印与格式化输出)

13.1 打印文本 在 fmt 包中&#xff0c;Print 函数用于打印&#xff08;输出&#xff09;文本信息。依据输出目标的不同&#xff0c;Print 函数可以划分为三组&#xff0c;详见下表。 按应用目标分组函数说明将文本信息输出到标准输出流&#xff0c;一般是输出到屏幕上Print将…...

Linux 深入浅出信号量:从线程到进程的同步与互斥实战指南

知识点1【信号量概述】 信号量是广泛用于进程和线程间的同步和互斥。信号量的本质 是一个非负的整数计数器&#xff0c;它被用来控制对公共资源的访问 当信号量值大于0的时候&#xff0c;可以访问&#xff0c;否则将阻塞。 PV原语对信号量的操作&#xff0c;一次P操作使信号…...

Oracle数据库数据编程SQL<9.1 数据库逻辑备份和迁移exp和imp之导出、导入>

EXP (Export) 和 IMP (Import) 是 Oracle 提供的传统数据导出导入工具,用于数据库逻辑备份和迁移。尽管在较新版本中已被 Data Pump (EXPDP/IMPDP) 取代,但在某些场景下仍然有用。 目录 一、EXP 导出工具 1. 基本语法 2. 常用参数说明 3. 导出模式 3.1 表模式导出 3.2 用…...

DotnetCore开源库SampleAdmin源码编译

1.报错: System.Net.Sockets.SocketException HResult0x80004005 Message由于目标计算机积极拒绝&#xff0c;无法连接。 SourceSystem.Net.Sockets StackTrace: 在 System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, C…...

Kaggle-Disaster Tweets-(二分类+NLP+模型融合)

Disaster Tweets 题意&#xff1a; 就是给出一个dataframe包含text这一列代表着文本&#xff0c;文本会有一些词&#xff0c;问对于每条记录中的text是真关于灾难的还是假关于灾难的。 比如我们说今天作业真多&#xff0c;这真是一场灾难。实际上这个灾难只是我们调侃而言的。…...

搭建一个网站需要选择什么配置的服务器?

一般要考虑网站规模、技术需求等因素来进行选择。 小型网站&#xff1a;个人博客、小型企业官网等日均量在 1000 以内的网站&#xff0c;一般推荐2 核 CPU、4GB 内存、50GB 硬盘&#xff0c;带宽 1 - 5M。如果是纯文字内容且图片较少的小型网站&#xff0c;初始阶段 1 核 CPU、…...

idea如何使用git

在 IntelliJ IDEA 中使用 Git 的详细步骤如下&#xff0c;分为配置、基础操作和高级功能&#xff0c;适合新手快速上手&#xff1a; ​一、配置 Git​ ​安装 Git​ 下载并安装 Git&#xff0c;安装时勾选“Add to PATH”。验证安装&#xff1a;终端输入 git --version 显示版本…...

webpack vite

​ 1、webpack webpack打包工具&#xff08;重点在于配置和使用&#xff0c;原理并不高优。只在开发环境应用&#xff0c;不在线上环境运行&#xff09;&#xff0c;压缩整合代码&#xff0c;让网页加载更快。 前端代码为什么要进行构建和打包&#xff1f; 体积更好&#x…...

.Net 9 webapi使用Docker部署到Linux

参考文章连接&#xff1a; https://www.cnblogs.com/kong-ming/p/16278109.html .Net 6.0 WebApi 使用Docker部署到Linux系统CentOS 7 - 长白山 - 博客园 项目需要跨平台部署&#xff0c;所以就研究了一下菜鸟如何入门Net跨平台部署&#xff0c;演示使用的是Net 9 webAPi Li…...

PyTorch 根据官网命令行无法安装 GPU 版本 解决办法

最近遇到一个问题&#xff0c;PyTorch 官网给出了 GPU 版本的安装命令&#xff0c;但安装成功后查看版本&#xff0c;仍然是 torch 2.6.0cpu 1. 清理现有 PyTorch 安装 经过探索发现&#xff0c;需要同时卸载 conda 和 pip 安装的 torch。 conda remove pytorch torchvision …...

PHP防火墙代码,防火墙,网站防火墙,WAF防火墙,PHP防火墙大全

PHP防火墙代码,防火墙,网站防火墙,WAF防火墙,PHP防火墙大全 资源宝整理分享&#xff1a;https://www.htple.net PHP防火墙&#xff08;作者&#xff1a;悠悠楠杉&#xff09; 验证测试&#xff0c;链接后面加上?verify_cs1后可以自行测试 <?php //复制保存zzwaf.php$we…...

使用 Vitis Model Composer 生成 FPGA IP 核

本文将逐步介绍如何使用 Vitis Model Composer 生成 FPGA IP 核&#xff0c;从建模到部署。 在当今快节奏的世界里&#xff0c;技术正以前所未有的速度发展&#xff0c;FPGA 设计也不例外。高级工具层出不穷&#xff0c;加速着开发进程。传统上&#xff0c;FPGA 设计需要使用硬…...

Day08 【基于jieba分词实现词嵌入的文本多分类】

基于jieba分词的文本多分类 目标数据准备参数配置数据处理模型构建主程序测试与评估测试结果 目标 本文基于给定的词表&#xff0c;将输入的文本基于jieba分词分割为若干个词&#xff0c;然后将词基于词表进行初步编码&#xff0c;之后经过网络层&#xff0c;输出在已知类别标…...

BERT、T5、ViT 和 GPT-3 架构概述及代表性应用

BERT、T5、ViT 和 GPT-3 架构概述 1. BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09; 架构特点 基于 Transformer 编码器&#xff1a;BERT 使用多层双向 Transformer 编码器&#xff0c;能够同时捕捉输入序列中每个词的左右上下文信息…...

倚光科技:以创新之光,雕琢全球领先光学设计公司

在光学技术飞速发展的当下&#xff0c;每一次突破都可能为众多领域带来变革性的影响。而倚光&#xff08;深圳&#xff09;科技有限公司&#xff0c;作为光学设计公司的一颗璀璨之星&#xff0c;正以其卓越的创新能力和深厚的技术底蕴&#xff0c;引领着光学设计行业的发展潮流…...

数据结构(六)——红黑树及模拟实现

目录 前言 红黑树的概念及性质 红黑树的效率 红黑树的结构 红黑树的插入 变色不旋转 单旋变色 双旋变色 插入代码如下所示&#xff1a; 红黑树的查找 红黑树的验证 红黑树代码如下所示&#xff1a; 小结 前言 在前面的文章我们介绍了AVL这一棵完全二叉搜索树&…...