企业官网nodejs mySQL数据库安装及使用
以下是企业官网的MySQL数据库设计、本地安装指南,以及基于Node.js的增删改查(CRUD)实现方案:
一、MySQL数据库设计(企业官网基础表)
1. 核心表结构
-- 1. 用户表(管理员)
CREATE TABLE `users` (`id` INT AUTO_INCREMENT PRIMARY KEY,`username` VARCHAR(50) NOT NULL UNIQUE,`password` VARCHAR(255) NOT NULL, -- 存储加密后的密码`role` ENUM('admin', 'editor') DEFAULT 'editor',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 2. 新闻/文章表
CREATE TABLE `articles` (`id` INT AUTO_INCREMENT PRIMARY KEY,`title` VARCHAR(100) NOT NULL,`content` TEXT NOT NULL,`cover_image` VARCHAR(255),`status` ENUM('draft', 'published') DEFAULT 'draft',`author_id` INT,`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,`updated_at` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,FOREIGN KEY (`author_id`) REFERENCES `users`(`id`)
);-- 3. 产品表
CREATE TABLE `products` (`id` INT AUTO_INCREMENT PRIMARY KEY,`name` VARCHAR(100) NOT NULL,`description` TEXT,`price` DECIMAL(10,2),`category` VARCHAR(50),`is_featured` BOOLEAN DEFAULT FALSE,`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 4. 联系方式表
CREATE TABLE `contacts` (`id` INT AUTO_INCREMENT PRIMARY KEY,`name` VARCHAR(50) NOT NULL,`email` VARCHAR(100) NOT NULL,`phone` VARCHAR(20),`message` TEXT,`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. 初始化测试数据
INSERT INTO `users` (`username`, `password`, `role`)
VALUES ('admin', '$2a$10$N9qo8uLOickgx2ZMRZoMy.MQDqShxs6Ld4eYFJwD17tWZROr6i.CW', 'admin');INSERT INTO `articles` (`title`, `content`, `author_id`, `status`)
VALUES ('欢迎来到企业官网', '这是第一篇示例文章...', 1, 'published');
二、本地安装MySQL
1. 安装步骤(以Mac为例)
# 通过Homebrew安装
brew install mysql# 启动服务
brew services start mysql# 安全初始化(设置root密码)
mysql_secure_installation# 登录MySQL
mysql -u root -p
2. 创建数据库
CREATE DATABASE company_website;
USE company_website;
-- 执行前面的建表SQL
三、Node.js实现CRUD操作
1. 项目初始化
mkdir node-mysql-crud && cd node-mysql-crud
npm init -y
npm install express mysql2 body-parser cors
2. 目录结构
├── app.js # 主入口
├── db.js # 数据库连接
├── routes/ # 路由
│ ├── articles.js
│ └── products.js
└── package.json
3. 关键代码实现
db.js - 数据库连接
const mysql = require('mysql2/promise');const pool = mysql.createPool({host: 'localhost',user: 'root',password: 'your_password',database: 'company_website',waitForConnections: true,connectionLimit: 10
});module.exports = pool;
routes/articles.js - 文章CRUD
const express = require('express');
const router = express.Router();
const db = require('../db');// 获取所有文章
router.get('/', async (req, res) => {const [rows] = await db.query('SELECT * FROM articles');res.json(rows);
});// 创建文章
router.post('/', async (req, res) => {const { title, content, author_id } = req.body;const [result] = await db.query('INSERT INTO articles (title, content, author_id) VALUES (?, ?, ?)',[title, content, author_id]);res.status(201).json({ id: result.insertId });
});// 更新文章
router.put('/:id', async (req, res) => {const { title, content } = req.body;await db.query('UPDATE articles SET title=?, content=? WHERE id=?',[title, content, req.params.id]);res.sendStatus(204);
});// 删除文章
router.delete('/:id', async (req, res) => {await db.query('DELETE FROM articles WHERE id=?', [req.params.id]);res.sendStatus(204);
});module.exports = router;
app.js - 主入口
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();// 中间件
app.use(cors());
app.use(bodyParser.json());// 路由
const articleRouter = require('./routes/articles');
app.use('/api/articles', articleRouter);// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {console.log(`Server running on http://localhost:${PORT}`);
});
四、接口测试示例(使用Postman)
| 操作 | 方法 | URL | 请求体示例(JSON) |
|---|---|---|---|
| 查所有 | GET | http://localhost:3000/api/articles | - |
| 查单个 | GET | http://localhost:3000/api/articles/1 | - |
| 增 | POST | http://localhost:3000/api/articles | {"title":"新文章","content":"...","author_id":1} |
| 改 | PUT | http://localhost:3000/api/articles/1 | {"title":"更新标题","content":"..."} |
| 删 | DELETE | http://localhost:3000/api/articles/1 | - |
五、增强建议
- 安全加固:
- 使用
dotenv管理敏感配置 - 密码加密存储(如bcrypt)
- 使用
- 性能优化:
- 添加数据库连接池
- 实现分页查询(
LIMIT offset, count)
- 扩展功能:
- 文件上传(文章封面图)
- 软删除(添加
is_deleted字段)
如果需要更详细的实现(如用户认证、文件上传),可以进一步展开说明。
相关文章:
企业官网nodejs mySQL数据库安装及使用
以下是企业官网的MySQL数据库设计、本地安装指南,以及基于Node.js的增删改查(CRUD)实现方案: 一、MySQL数据库设计(企业官网基础表) 1. 核心表结构 -- 1. 用户表(管理员) CREATE T…...
Spring Boot自动配置原理深度解析:从条件注解到spring.factories
大家好!今天我们来深入探讨Spring Boot最神奇的特性之一——自动配置(Auto-configuration)。这个功能让Spring Boot如此受欢迎,因为它大大简化了我们的开发工作。让我们一起来揭开它的神秘面纱吧!👀 🌟 什么是自动配置…...
ubuntu学习day3
3 编译与调试 3.1 gcc/g编译器 当我们进行编译的时候,要使用一系列的工具,我们称之为工具链。SDK就是编译工具链的简写,我们所使用的是gcc系列编译工具链。使用-v参数来查看gcc的版本,从而确定某些语法特性是否可用,…...
C++数据结构与二叉树详解
前言: 在C编程的世界里,数据结构是构建高效程序的基石,而二叉树则是其中最优雅且应用广泛的数据结构之一。本文将带你深入理解二叉树的本质、实现与应用,助你在算法设计中游刃有余。 一、二叉树的基本概念 1. 什么是二叉树 二叉树…...
论文阅读:2023 arxiv Safe RLHF: Safe Reinforcement Learning from Human Feedback
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Safe RLHF: Safe Reinforcement Learning from Human Feedback https://arxiv.org/pdf/2310.12773 https://github.com/PKU-Alignment/safe-rlhf 速览 研究动机ÿ…...
C++11中的std::condition_variable
一、什么是条件变量? std::condition_variable 是C11标准库中提供的线程同步工具,用于在多线程环境中实现“等待-通知”机制。它的核心作用是让线程能够高效地等待某个条件成立,避免“忙等待”对CPU资源的浪费。 条件变量必须与std::mutex配…...
6.8.最小生成树
一.复习: 1.生成树: 对于一个连通的无向图,假设图中有n个顶点,如果能找到一个符合以下要求的子图: 子图中包含图中所有的顶点,同时各个顶点保持连通, 而且子图的边的数量只有n-1条࿰…...
QT中栅格模式探索
1、Qt中选择了栅格模式,如下图所示: 2、在进行整个大的UI界面布局时,需了解每个控件所需要选择的属性sizePolicy。 sizePolicy包含如下几种选择: 3、举个例子:此时整个UI界面,我采用了栅格模式…...
SLAM | 激光SLAM中的退化问题
在激光SLAM中,判断退化环境的核心是通过数学建模分析环境特征对位姿估计的约束能力。除了LOAM中提出的退化因子D外,还存在多种基于表达式和阈值设定的方法。以下是几种典型方法及其实现原理: 1. 协方差矩阵特征值分析 原理:通过分析点云协方差矩阵的特征值分布,判断环境中…...
C++入门基础:命名空间,缺省参数,函数重载,输入输出
命名空间: C语言是基于C语言的,融入了面向对象编程思想,有了很多有用的库,所以接下来我们将学习C如何优化C语言的不足的。 在C/C语言实践中,在全局作用域中变量,函数,类会有很多,这…...
tomcat 的安装与启动
文章目录 tomcat 服务器安装启动本地Tomcat服务器 tomcat 服务器安装 https://tomcat.apache.org/下载 Tomcat 10.0.X 启动本地Tomcat服务器 进入 Tomcat 的 bin...
C 语言中经典的数据结构
在 C 语言中,经典的数据结构通常包括以下几种,每种都有其特定的应用场景和实现方式: 1. 数组(Array) 定义:连续内存空间存储相同类型的数据。 特点:随机访问快(O(1))&am…...
算法-堆+单调栈
堆 首先堆在我们的Java中我们的是一个优先队列类 PriorityQueue 然后我们要弄最大堆和最小堆 最大堆: PriorityQueue<Integer> pq new PriorityQueue<Integer>((a, b) -> b - a); 最小堆: PriorityQueue<Integer> pq new P…...
物联网平台管理系统
物联网平台管理系统概述 物联网平台管理系统是物联网架构中的核心枢纽,承担着承上启下的关键作用。它向下连接各类物联网设备,实现设备的接入、管理与控制;向上为应用开发提供统一的数据接口和共性模块工具,支撑起各种丰富多彩的…...
STM32CubeMX-H7-15-SPI通信协议读写W25Q64
前言 SPI(Serial Peripheral Interface)通信协议是一种高速、全双工、同步的串行通信协议 本篇文章就使用W25Q64模块来学习SPI,包括软件SPI代码的编写,硬件SPI,中断SPI和DMASPI SPI的应用场景和模块 !这里是抄AI的&a…...
【软考】论devops在企业信息系统开发中的应用
摘要: 随着互联网的不断发展,各行各业都在建设自己的企业信息系统,而随着业务的不断升级和复杂化,系统的更新迭代速度越来越快,系统也越来越复杂。对于信息系统开发者,架构师,管理者,…...
生物化学笔记:医学免疫学原理22 肿瘤及肿瘤治疗
肿瘤及肿瘤治疗 免疫疗法 CAR-T细胞介绍...
JVM考古现场(二十二):降维打击·用二向箔优化内存模型
"警报!三维堆内存正在经历二维化坍缩!" 我腰间的玄铁令突然震动,在蜀山剑派的量子剑阵中投射出诡异的曼德博分形——这是三体文明发动降维打击的铁证! 楔子:二向箔奇点降临 昆仑镜监控日志: // …...
第三阶段面试题
Nginx nginx常用模块以及其功能 proxy模块,进行代理功能 ssl模块,进行HTTPS协议的使用 gzip模块,进行传输数据的压缩 upstream模块,进行反向代理时使用 static模块,静态资源进行访问的模块 cache模块࿰…...
操作系统-PV
🧠 背景:为什么会有 PV? 类比:内存(生产者) 和 CPU(消费者) 内存 / IO / 磁盘 / 网络下载 → 不断“生产数据” 例如:读取文件、下载视频、从数据库加载信息 CPU → 负…...
nuxt3路由切换页面出不来,刷新可以
nuxt3遇到一个奇怪的现象: 不管是router.push()跳转还是navigateTo()跳转,浏览器url变了,但是页面是空白的,没加载出来,刷新之后页面正常。 解决方案: <template>下的所有内容必须套在一个div里面...
Spring Boot配置文件优先级全解析:如何优雅覆盖默认配置?
📚 一、为什么需要了解配置文件优先级? 想象一下,你正在玩一个游戏🎮,游戏里有默认设置,但你可以通过不同的方式修改这些设置: 游戏内置的默认设置(就像Spring Boot的默认配置&…...
医院数据中心智能化数据上报与调数机制设计
针对医院数据中心的智能化数据上报与调数机制设计,需兼顾数据安全性、效率性、合规性及智能化能力。以下为系统性设计方案,分为核心模块、技术架构和关键流程三部分: 一、核心模块设计 1. 数据上报模块 子模块功能描述多源接入层对接HIS/LIS/PACS/EMR等异构系统,支持API/E…...
Linux之基础命令
Linux作为开源操作系统的代表,以其高效、灵活和强大的命令行工具闻名。无论是系统管理、开发调试还是日常使用,掌握基础命令都是与Linux系统交互的必备技能。本文整理了20个最常用的Linux基础命令,帮助新手快速入门。 目录 目录与文件导航文…...
【MATLAB代码例程】AOA与TOA结合的高精度平面地位,适用于四个基站的情况,附完整的代码
本代码实现了一种基于到达角(AOA) 和到达时间(TOA) 的混合定位算法,适用于二维平面内移动或静止目标的定位。通过4个基站的协同测量,结合最小二乘法和几何解算,能够有效估计目标位置,并支持噪声模拟、误差分析和可视化输出。适用于室内定位、无人机导航、工业监测等场景…...
PC主板及CPU ID 信息、笔记本电脑唯一 MAC地址获取
🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 PC主板及CPU ID 信息物理 MAC地址获取win11 新电脑 wmic 安装❤️ 欢迎一起学AI…...
RK3568笔记八十二: 利用AI生成的简单数据转发服务程序
若该文为原创文章,转载请注明原文出处。 测试AI编写代码能力,做了个简单的数据转发功能,后期想部署到服务器 功能相对简单,大概功能如下: 1、打开TCP服务端,等待客户端连接 2、客户端连接后发送ID:1234格式,服务端收到,解析出ID:1234并记录 3、相同的ID数据之间互…...
C++17 信号量模拟实现
C17 信号量模拟实现 一、实现原理 C17 标准库没有原生信号量(C20才有),但可以通过 std::mutex std::condition_variable 模拟实现。以下是核心逻辑: #include <mutex> #include <condition_variable>class CountingSemaphore { private:…...
web后端语言中篇
#作者:允砸儿 #日期:乙巳青蛇年 三月十八 笔者本来打算隔一天给它更完的,但是事情有点多这几天,实在是抱歉。废话不多说直接进入正题。 PHP流程控制语句 什么是流控:流程控制语句用于决定代码的执行顺序。 #注意流程控制语句…...
Spine-Leaf 与 传统三层架构:全面对比与解析
本文将详细介绍Spine-Leaf架构,深入对比传统三层架构(Core、Aggre、Access),并探讨其与Full-mesh网络和软件定义网络(SDN)的关联。通过通俗易懂的示例和数据中心网络分析,我将帮助您理解Spine-L…...
