Node.js 开发后台实现基本的增删改查功能
myzbx 2025-06-10 00:08 36 浏览
0.前言
最近几年,使用 Node.js 开发后台越来越火。Node.js 结合 npm 生态可以快速开发一套后台系统。本篇文章手把手带大家使用 Node.js 操作 MySQL 数据库快速搭建一套后台系统,实现基本的增删改查。
1.环境准备
1.1 开发工具:Vscode
大家可以去官网自行下载安装
https://code.visualstudio.com/
1.2 后台环境:Node
大家可以去官网自行下载安装
https://nodejs.org/zh-cn
然后配置环境变量
- windows系统:
系统环境变量 -> 新建:NODE_HOME,值为 node.js 的安装目录。path 变量新增 %NODE_HOME%
接着配置 npm 的淘宝镜像,提升下载速度
windows 电脑快捷键 Windows+R ,输入 CMD 打开命令行,然后输入:
npm configsetregistry https://registry.npmmirror.com/
1.3 本地安装 MySQL
MySQL 分为服务端和客户端,所有数据都存放在服务端。我们可以在客户端通过写 SQL 语句操作服务端的数据。所以我们要先安装服务端。
这里我给大家下载好了 MySQL8
链接: https://pan.baidu.com/s/1-fSQsIN8cvpz6rhE5jxYHg?pwd=6666
提取码: 6666
--来自百度网盘超级会员v10的分享
本地安装 MySQL 可以看这篇教程,这里不再赘述
https://blog.csdn.net/O18670279028/article/details/145774032
1.4 vscode 安装 MySQL 插件
前面我们安装好了 MySQL 的服务端,接下来要使用客户端操作服务端了。这里使用 vscode 的 MySQL 客户端插件。
安装插件之后,点击 + 号绑定服务端的连接信息
输入主机地址,本地一般填写 localhost。
账号
密码
默认端口:3306
直接 enter 键
连接成功之后就可以看到 MySQL 服务端数据了
选中绑定的数据库,进行 sql 语句操作
2.初始化项目
在 VSCode 中新建文件夹 node-mysql-api
打开终端,初始化 npm 项目:
npm init -y
安装插件:
npm install express mysql2 cors
- Express 是一个基于 Node.js 平台的极简 Web 开发框架,它帮助开发者快速构建 Web 应用和 API,支持各种中间件处理 HTTP 请求。
- axios 是工作在前端,向后端提出申请,接收返回数据的。而 express,是工作在后端(node环境),接收前端发出的请求,并向前端返回数据。
- cors 是一个用来解决跨域访问插件
项目结构:
3.配置数据库
创建数据库和表:SQL 语句
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`age` int DEFAULT NULL,
`create_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
4.核心代码
4.1 创建数据库连接的 js
4.2 创建Express服务器(app.js)
4.3 用户接口实现(routes/users.js)
const express = require('express');
const router = express.Router();
// 数据库连接池
const pool = require('../database/db.js');
// 获取所有用户
router.get('/', async (req, res) => {
try {
const [rows] = await pool.query('SELECT * FROM users');
res.json(rows);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// 创建新用户
router.post('/save', async (req, res) => {
const { name, age } = req.body;
if (!name || !age) {
return res.status(400).json({ error: '姓名或者年龄不能为空' });
}
try {
const [result] = await pool.query(
'INSERT INTO users (name, age) VALUES (?, ?)',
[name, age]
);
res.status(201).json({ id: result.insertId, name, age });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// 更新用户
router.put('/update/:id', async (req, res) => {
const { id } = req.params;
const { name, age } = req.body;
try {
const [result] = await pool.query(
'UPDATE users SET name = ?, age = ? WHERE id = ?',
[name, age, id]
);
if (result.affectedRows === 0) {
return res.status(404).json({ error: '用户不存在' });
}
res.json({ id, name, age });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// 删除用户
router.delete('/delete/:id', async (req, res) => {
const { id } = req.params;
try {
const [result] = await pool.query(
'DELETE FROM users WHERE id = ?',
[id]
);
if (result.affectedRows === 0) {
return res.status(404).json({ error: '用户不存在' });
}
res.sendStatus(204);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
module.exports = router;
5.接口测试
打开项目终端,启动后台服务器
node app.js
在浏览器输入接口地址,获取所有用户信息:
知否君解读:
输入 npm app.js 相当于启动了后台系统,后台系统的端口是 3000。
我们在地址栏输入 http://localhost:3000/users/ 向后台发起请求,node 后端服务根据浏览器路径 /users 匹配到了 routes 下的users.js 接口文件。
users.js 文件根据后面的 / 匹配查询方法,在查询方法里面通过执行 sql 语句获取数据,并将数据以 json 格式返回到前端浏览器。
6.完整代码
链接: https://pan.baidu.com/s/1VHveIpXCpo3Z_j3UyQMJ6w?pwd=6666
提取码: 6666
--来自百度网盘超级会员v10的分享
拿到代码之后记得:
- npm install 安装依赖
- 修改 db.js 里面连接 MySQL 数据库的账号密码等配置项
- npm app.js 启动后端项目
相关推荐
- 如何设计一个优秀的电子商务产品详情页
-
加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...
- 怎么在JS中使用Ajax进行异步请求?
-
大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...
- 中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革
-
前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...
- 前端监控 SDK 开发分享_前端监控系统 开源
-
一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...
- Ajax 会被 fetch 取代吗?Axios 怎么办?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...
- 前端面试题《AJAX》_前端面试ajax考点汇总
-
1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...
- Ajax 详细介绍_ajax
-
1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...
- 6款可替代dreamweaver的工具_替代powerdesigner的工具
-
dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...
- 我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊
-
接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...
- 福斯《死侍》发布新剧照 "小贱贱"韦德被改造前造型曝光
-
时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...
- 2021年超详细的java学习路线总结—纯干货分享
-
本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...
- 不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!
-
Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...
- 2025 年 Python 爬虫四大前沿技术:从异步到 AI
-
作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...
- 最贱超级英雄《死侍》来了!_死侍超燃
-
死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...
- 停止javascript的ajax请求,取消axios请求,取消reactfetch请求
-
一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)
- JS Loop For (32)
