在现代Web开发中,全栈应用已成为主流。本文将以一个经典的Todo(待办事项)应用为例,详细记录从项目下载、环境配置、后端启动、数据库交互到前端运行的完整流程。我们将深入探讨在此过程中遇到的一个典型问题——CORS与API请求失败,并提供从“快速修复”到“最佳实践”的解决方案。这不仅是一份操作指南,更是一次宝贵的实战经验总结。
你将从本博客中学到:
file:///
协议导致的前后端通信失败问题。live-server
等工具启动前端开发服务器的正确姿势。mysql2
(高性能MySQL驱动)dotenv
(管理环境变量)cors
(处理跨域资源共享)在开始之前,请确保您的开发环境中已安装以下软件:
后端是整个应用的大脑,负责处理业务逻辑和数据存储。
首先,我们需要告诉后端应用如何连接到我们的数据库。
进入后端目录: cd backend
创建环境变量文件: 项目中提供了一个.env.example
文件作为模板。我们复制它并重命名为.env
。
编辑.env
文件: 打开.env
文件,填入您的MySQL数据库信息。
# .env
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=你的MySQL密码
DB_NAME=todoapp
PORT=5000
Node.js项目通过package.json
文件管理依赖。我们需要安装这些依赖。
# 在 backend 目录下运行
npm install
一切就绪后,启动后端服务器。
# 在 backend 目录下运行
npm start
如果一切顺利,您将在终端看到以下输出,表示后端已成功启动并连接到数据库:
✅ MySQL数据库连接成功
✅ todos表检查/创建完成
服务器运行在端口 5000
API文档: http://localhost:5000/api/health
数据库: MySQL
数据是应用的血液。后端启动后,我们需要确保数据库和表都已就绪。
后端应用需要一个名为todoapp
的数据库。您可以使用Navicat或命令行创建它。
使用Navicat:
todoapp
,选择字符集为 utf8mb4
。这个项目的后端代码非常友好,它会在启动时自动检查todos
表是否存在,如果不存在,则会自动创建。您无需手动创建表结构。
当您在前端添加了两个待办事项后,有多种方法可以查看数据库中的信息。
正如项目中的 Navicat操作指南.md
所述,使用图形化工具是最直观的方式。
todoapp
数据库。todoapp
数据库,您会看到一个名为“表”的分类。todos
表。之后,您应该能在一个表格中看到刚刚添加的两条待办事项记录。
效果如下:
如果您更习惯使用命令行,可以按照以下步骤操作:
mysql -u root -p
todoapp
数据库:USE todoapp;
todos
表中的所有数据:SELECT * FROM todos;
exit;
您也可以直接通过浏览器访问后端提供的API来查看数据,这同时也能验证API是否工作正常。
浏览器页面上会显示一个JSON格式的数组,其中就包含了您添加的两条待办事项。
前端是用户与应用交互的界面。在这里,我们遇到了一个非常典型且重要的问题。
很多初学者会直接在文件管理器中双击frontend/index.html
来运行前端。这时,浏览器的地址栏会显示一个以file:///
开头的路径。
当您在这种模式下尝试添加待办事项时,操作会失败。打开浏览器开发者工具(按F12),您会在控制台看到类似**CORS (跨域资源共享)**的错误。
根本原因:
file://
协议和后端服务所在的http://
协议视为不同的“源”(Origin)。index.html
中的判断逻辑 window.location.hostname === 'localhost'
会失败,因为在file://
协议下,hostname
是空的,导致API请求地址错误地指向了一个不存在的生产环境URL。为了快速解决这个问题,我们进行了一个简单的修改:将API地址写死。
修改前:
const API_BASE_URL = window.location.hostname === 'localhost'
? 'http://localhost:5000'
: 'https://your-backend-url.railway.app';
修改后:
const API_BASE_URL = 'http://localhost:5000';
这个修改能让应用在本地file:///
模式下工作,但它不是一个好的长期方案,因为它破坏了开发环境和生产环境之间切换的灵活性。
正确的做法是,在本地也通过http://
协议来提供前端文件服务,模拟真实的网络环境。
frontend/package.json
已经为我们准备好了工具——live-server
。
操作步骤:
cd frontend
npm install
这个命令会下载live-server
。npm run dev
执行后,live-server
会自动在您的默认浏览器中打开一个新页面,地址通常是http://127.0.0.1:3000
或http://localhost:3000
。现在,前端和后端都通过http
协议提供服务,它们属于不同的端口,但后端已经配置了cors
中间件,允许来自任何源的请求,因此可以完美通信。
现在,我们来梳理一下从头到尾的正确开发流程:
backend
目录,运行npm start
。frontend
目录,运行npm run dev
。live-server
自动打开的浏览器页面中操作Todo应用。.env
文件可以安全、灵活地管理敏感信息和配置,避免将其硬编码在代码中。cors
中间件)是全栈开发的基础。file:///
: 任何现代Web开发都应该在本地使用开发服务器,以确保开发环境与生产环境尽可能一致。通过本次实践,我们不仅成功地在本地部署了一个全栈应用,更重要的是,我们深入理解了其背后的工作原理和开发中的常见“陷阱”。希望这篇博客能为您未来的全栈开发之旅提供有价值的参考。
源码链接如下:源码