news 2026/5/16 16:40:09

前端与数据库交互

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端与数据库交互

1. 前端角色:发起请求和处理响应

前端主要负责:

  • 收集用户输入数据

  • 通过HTTP请求调用后端API

  • 处理响应并更新UI

2. 基础前端代码示例(使用Fetch API)

// API服务模块 class ApiService { constructor(baseURL) { this.baseURL = baseURL; } // 查询数据 async getItems() { try { const response = await fetch(`${this.baseURL}/api/items`); if (!response.ok) throw new Error('获取数据失败'); return await response.json(); } catch (error) { console.error('获取数据出错:', error); throw error; } } // 添加数据 async addItem(itemData) { try { const response = await fetch(`${this.baseURL}/api/items`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(itemData) }); if (!response.ok) throw new Error('添加失败'); return await response.json(); } catch (error) { console.error('添加数据出错:', error); throw error; } } // 更新数据 async updateItem(id, updateData) { try { const response = await fetch(`${this.baseURL}/api/items/${id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(updateData) }); if (!response.ok) throw new Error('更新失败'); return await response.json(); } catch (error) { console.error('更新数据出错:', error); throw error; } } // 删除数据 async deleteItem(id) { try { const response = await fetch(`${this.baseURL}/api/items/${id}`, { method: 'DELETE' }); if (!response.ok) throw new Error('删除失败'); return true; } catch (error) { console.error('删除数据出错:', error); throw error; } } } // 使用示例 const api = new ApiService('https://your-backend.com'); // 获取并显示数据 async function loadAndDisplayItems() { const items = await api.getItems(); // 更新UI显示数据 } // 添加新项目 async function handleAddItem() { const newItem = { name: document.getElementById('itemName').value, description: document.getElementById('itemDesc').value }; await api.addItem(newItem); await loadAndDisplayItems(); // 刷新数据 }

后端实现示例(Node.js + Express + MySQL)

了解后端如何实现可以帮助前端开发者更好地协作:

// 后端API示例 const express = require('express'); const mysql = require('mysql2/promise'); require('dotenv').config(); const app = express(); app.use(express.json()); // 创建数据库连接池(生产环境使用环境变量) const pool = mysql.createPool({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, waitForConnections: true, connectionLimit: 10 }); // 获取所有项目 app.get('/api/items', async (req, res) => { try { const [rows] = await pool.execute('SELECT * FROM items'); res.json(rows); } catch (error) { console.error('数据库查询错误:', error); res.status(500).json({ error: '服务器内部错误' }); } }); // 添加新项目 app.post('/api/items', async (req, res) => { try { const { name, description } = req.body; // 数据验证 if (!name || !description) { return res.status(400).json({ error: '缺少必要字段' }); } const [result] = await pool.execute( 'INSERT INTO items (name, description) VALUES (?, ?)', [name, description] ); res.status(201).json({ id: result.insertId, name, description }); } catch (error) { console.error('数据库插入错误:', error); res.status(500).json({ error: '服务器内部错误' }); } }); // 更新项目 app.put('/api/items/:id', async (req, res) => { // ... 类似实现 }); // 删除项目 app.delete('/api/items/:id', async (req, res) => { // ... 类似实现 }); app.listen(3000, () => { console.log('服务器运行在 http://localhost:3000'); });

现代前端数据管理方案

1. 使用状态管理库

// 以React + TanStack Query为例 import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; function ItemList() { const queryClient = useQueryClient(); // 获取数据 const { data: items, isLoading } = useQuery({ queryKey: ['items'], queryFn: () => fetch('/api/items').then(res => res.json()) }); // 添加数据 const addMutation = useMutation({ mutationFn: (newItem) => fetch('/api/items', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(newItem) }).then(res => res.json()), onSuccess: () => { queryClient.invalidateQueries(['items']); // 刷新数据 } }); // 类似地实现更新和删除... }

2. 使用专门的HTTP客户端

  • Axios: 功能强大的HTTP客户端

  • SWR: React专用的数据获取库

  • RTK Query: Redux Toolkit的数据获取解决方案

实际项目中的最佳实践

1. 统一错误处理

// 错误处理中间件 const handleApiError = async (response) => { if (!response.ok) { const error = await response.json().catch(() => ({})); throw new Error(error.message || `HTTP错误: ${response.status}`); } return response.json(); }; // 使用示例 fetch('/api/items') .then(handleApiError) .then(data => console.log(data)) .catch(error => showErrorToast(error.message));

2. 请求拦截器(添加认证等)

// Axios示例 axios.interceptors.request.use(config => { const token = localStorage.getItem('auth_token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }); // 响应拦截器处理常见错误 axios.interceptors.response.use( response => response, error => { if (error.response?.status === 401) { // 跳转到登录页 window.location.href = '/login'; } return Promise.reject(error); } );
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 15:24:37

掌握 Open Graph 协议:让你的网页在社交媒体上大放异彩

🌟 什么是 Open Graph 协议? Open Graph 协议(简称 OG 协议)是由 Facebook 在 2010 年推出的一套技术规范。它的核心目标是允许任何网页成为一个“富对象”(rich object),使其在社交网络&#…

作者头像 李华
网站建设 2026/5/11 4:46:23

打开软件出现找不到vfp9rchs.dll文件 丢失的情况 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/5/14 6:49:50

vue基于Spring Boot的共享充电宝租赁管理系统_z87x7yvm

目录 具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring…

作者头像 李华
网站建设 2026/5/8 21:20:12

有机碳含量(TOC)是什么

一、有机碳含量(TOC)的核心定义 有机碳含量(Total Organic Carbon, TOC)是指页岩中有机碳元素的质量占比(单位:wt%),是衡量页岩中有机质丰度的核心指标——有机质是页岩油的“母质”…

作者头像 李华
网站建设 2026/5/16 13:01:10

JS 加密绕过大杀器!SpiderX 自动化工具横空出世,安全人直接封神

🐉工具介绍 SpiderX一款利用爬虫技术实现前端JS加密自动化绕过的爆破登陆渗透测试工具。 这个工具的亮点在于通过模拟浏览器点击实现前端加密爆破。它源于实际场景中遇到的问题,经过多次测试,虽然仍有一些难以预料的异常情况,但…

作者头像 李华
网站建设 2026/5/14 14:37:34

基于Spring Boot的教学资料管理系统设计与实现

背景及意义在教育信息化持续推进的当下,高校教学资料种类与数量急剧增长,传统的人工管理方式愈发难以满足需求。教师和学生常常因资料查找困难、版本混乱等问题,耗费大量时间与精力。同时,不同院系、专业的教学资料缺乏统一、高效…

作者头像 李华