news 2026/7/28 16:51:39

3 连接mysql 数据库 进行数据的存储和读取

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3 连接mysql 数据库 进行数据的存储和读取

1下载node 连接模块

npm i mysql -s

2 在 src 下创建 conf 文件夹 用于存放配置文件 新建db.js

通过环境参数的不同进行线上和线下配置

const env = process.env.NODE_ENV//环境参数 let MYSQL_CONF if (env === 'dev') { MYSQL_CONF = { host: 'localhost', user: 'root', password: '', port: '3306', database: 'myblog' }; } if (env === 'production') { MYSQL_CONF = { host: 'localhost', user: 'root', password: '', port: '3306', database: 'myblog' }; } module.exports = { MYSQL_CONF }

3创建 db 文件夹 用于存放数据操作文件 msyql.exe

//引入msyql模块 const mysql = require('mysql'); //引入数据库配置 const { MYSQL_CONF } = require('../config/db'); //创建数据库连接 const con = mysql.createConnection(MYSQL_CONF); //连接数据库 con.connect(); // 执行sql代码 function exec (sql) { const promise = new Promise((resolve, reject) => { // con.query(sql, (err, result) => { if (err) { reject(err); return } resolve(result) }) }); return promise; } module.exports = { exec };

4创建数据库 文件

创建 myblog 数据库 创建 两张表

CREATE TABLE `blogs` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(50) NOT NULL, `content` longtext NOT NULL, `createtime` bigint(20) NOT NULL DEFAULT '0', `author` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) NOT NULL, `password` varchar(20) NOT NULL, `realname` varchar(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

修改controller 下的文件

blog.js

const { exec } = require('../db/mysql') const getList = (author, keyword) => { //1=1 保证语法不报错 let sql = `select * from blogs where 1=1 `; if (author) { sql += `and author='${author}' ` } if (keyword) { sql += `and title like '%${keyword}%'; ` } sql += `order by createtime desc;`; return exec(sql) } const getDetail = (id) => { const sql = ` select * from blogs where id='${id}'`; return exec(sql).then(rows => { return rows[0] }) } const newBlog = (blogData = {}) => { const title = blogData.title; const content = blogData.content; const author = blogData.author; const createTime = Date.now(); const sql = ` INSERT INTO blogs (title,content,createtime,author) VALUES ('${title}','${content}',${createTime},'${author}'); `; return exec(sql).then(insertData => { console.log('insertData is ', insertData); return { id: insertData.insertId } }) } const updateBlog = (id, blogData = {}) => { const title = blogData.title; const content = blogData.content; const sql = ` UPDATE blogs SET title = '${title}',content ='${content}' WHERE id=${id};`; return exec(sql).then(updateData => { console.log(updateData); if (updateData.affectedRows > 0) { return true } return false }) } const delBlog = (id,author) => { const sql = `DELETE FROM blogs WHERE id=${id} AND author='${author}';` return exec(sql).then(delData => { if (delData.affectedRows > 0) { return true } return false }) } module.exports = { getList, getDetail, newBlog, updateBlog, delBlog }

user.js

const { exec } = require('../db/mysql') const loginCheck = (username, password) => { const sql = `SELECT username,realname FROM users WHERE username='${username}' AND password ='${password}' `; return exec(sql).then(rows => { return rows[0] || {} }) } module.exports = { loginCheck }

修改app.js

const querystring = require('querystring') const handleBlogRouter = require('./src/router/blog') const handleUserRouter = require('./src/router/user') //用于处理 post data const getPostData = (req) => { const promise = new Promise((resolve, reject) => { if (req.method !== 'POST') { resolve({}) return } if (req.headers['content-type'] !== 'application/json') { resolve({}) return } let postData = '' req.on('data', chunk => { postData += chunk.toString() }) req.on('end', () => { if (!postData) { resolve({}) return } resolve( JSON.parse(postData) ) }) }) return promise } const serverHandle = (req, res) => { //设置返回格式 res.setHeader('Content-type', 'application/json') //处理 path const url = req.url req.path = url.split('?')[0] //解析 query req.query = querystring.parse(url.split('?')[1]) //处理 post Data getPostData(req).then(postData => { req.body = postData console.log(postData); //处理blog路由 const blogResult = handleBlogRouter(req, res) if (blogResult) { blogResult.then(blogData => { res.end(JSON.stringify(blogData)) }) return } //处理user路由 const userResult = handleUserRouter(req, res) if (userResult) { userResult.then(userData => { res.end(JSON.stringify(userData)) }) return } // 未命中路由, 返回404 res.writeHead(404, { "Content-type": "text/plain" }) res.write("404 Not Found\n") res.end() }) } module.exports = serverHandle

修改路由

const { getList, getDetail, newBlog, updateBlog, delBlog } = require('../controller/blog') const { SuccessModel, ErrorModel } = require('../model/resModel') const handleBlogRouter = (req, res) => { const method = req.method const id = req.query.id //获取博客列表 if (method === 'GET' && req.path === '/api/blog/list') { const author = req.query.author || '' const keyword = req.query.keyword || '' const result = getList(author, keyword) return result.then(listData => { return new SuccessModel(listData) }) } //获取博客详情 if (method === 'GET' && req.path === '/api/blog/detail') { const result = getDetail(id) return result.then(data => { return new SuccessModel(data) }) } //新建一篇博客 if (method === 'POST' && req.path === '/api/blog/new') { req.body.author = 'zhangsan' const result = newBlog(req.body) return result.then(data => { return new SuccessModel(data) }) } //更新一篇博客 if (method === 'POST' && req.path === '/api/blog/update') { const result = updateBlog(id, req.body) return result.then(val => { if (val) { return new SuccessModel('更新成功') } else { return new ErrorModel('更新失败') } }) } //删除一篇博客 if (method === 'POST' && req.path === '/api/blog/del') { const author = 'zhangsan' const result = delBlog(id, author); return result.then(val => { if (val) { return new SuccessModel('删除成功') } else { return new ErrorModel('删除失败') } }) } } module.exports = handleBlogRouter
const { loginCheck } = require('../controller/user') const { SuccessModel, ErrorModel } = require('../model/resModel') const handleUserRouter = (req, res) => { const method = req.method //登录 if (method === 'POST' && req.path === '/api/user/login') { const { username, password } = req.body const result = loginCheck(username, password) return result.then(data => { if (data.username) { return new SuccessModel() } return new ErrorModel('登录失败') }) } } module.exports = handleUserRouter
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 16:50:46

Agentic AI时代数据库架构演进:从数据仓库到智能决策引擎

1. 理解 Agentic AI 时代数据库角色的根本性转变 在传统的软件架构中,数据库的角色相对清晰且被动:它是一个可靠、持久、用于存储和查询结构化数据的系统。开发者的核心工作是设计表结构、编写高效的 SQL、优化索引和事务。然而,随着以大型语言模型(LLM)为核心的 Agentic…

作者头像 李华
网站建设 2026/7/28 16:49:35

1. 准备工作

1.准备工作前期准备工作当前系统环境学习书箱和资源前期准备工作 当前系统环境 当前系统环境Windows10专业版1903。官网下载并安装Python,当前最新版本Python为3.7.4(20190730)。官网下载并安装Sublime。官网下载并安装Pycharm。搜索Mysql …

作者头像 李华
网站建设 2026/7/28 16:49:03

服务计算--配置云桌面遇到的坑

前言 配置过程大部分参照潘老师的博客,下面总结了一些我遇到的以及听说过的问题供大家参考 安装Virtual Box 创建虚拟机内部虚拟网络时,步骤为管理 -> 主机网络管理器,创建一块虚拟网卡,网址分配:192.168.100.1/…

作者头像 李华
网站建设 2026/7/28 16:46:19

前端打包体积优化:Tree Shaking、代码分割与按需加载的深度实践

前端打包体积优化:Tree Shaking、代码分割与按需加载的深度实践 一、bundle 膨胀的隐性成本:首屏被拖慢的根因 去年帮一个电商首页做性能体检。打开产物一看,主 bundle 4.2MB,里面塞着完整 lodash、整个 moment.js、三套图标库。…

作者头像 李华
网站建设 2026/7/28 16:44:53

Q-learning在无人机三维路径规划中的MATLAB实现

1. 项目概述:当Q-learning遇上无人机三维路径规划在无人机自主导航领域,路径规划始终是核心挑战之一。传统A*、Dijkstra等算法在动态环境中表现受限,而强化学习中的Q-learning算法因其不需要环境先验模型的特性,在三维空间路径规划…

作者头像 李华
网站建设 2026/7/28 16:44:48

三菱FX5u PLC控制4轴伺服定位系统实战解析

1. 项目概述:FX5u控制4轴伺服定位组装线去年接手了一条挂扣自动组装产线的电气改造项目,核心需求是用三菱FX5u PLC同时控制4台伺服电机实现精确定位。这种多轴协同控制在包装、装配行业非常典型,但实际调试中遇到的同步性问题比预想中复杂得多…

作者头像 李华