theme: condensed-night-purple
highlight: a11y-dark
这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
安装模块
npm i express -S
npm i body-parser -S // 解析post请求参数插件
数据模型
id : 消息的唯一标识,
userId : 用户id,
content : '我是聊天内容' ,
creatTime : 消息创建时间
配置post请求参数
app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json())
数据库
这里data的数据保存在服务器的内存中,数据量过大的话会大量的消耗浏览器的内存,影响服务器的性能甚至导致服务器瘫痪 所以要将数据保存到数据库中
使用
安装插件
npm i mysql2 -S
启动
在终端 启动 mysql -uroot -p123456
查看数据库 show databases;
连接数据库
引入:const mysql = require('mysql2')
连接:let db = mysql.createConnection({ // 配置 host : 'localhost', // ip地址 port : '3306', // 端口 user: 'root', // 数据库账号密码 password : 123456, database : 'test' // 数据库名字 })
创建表 在终端运行
先进入要操作的数据库中 use 数据库名;
`CREATE TABLE IF NOT EXISTS `messege`( `id` INT UNSIGNED AUTO_INCREMENT, `userId` VARCHAR(100) NOT NULL, `content` VARCHAR(40) NOT NULL, `createTime` DATE, PRIMARY KEY ( `id` ) // 主键 )ENGINE=InnoDB DEFAULT CHARSET=utf8;`
展示表 show tables
插入数据到数据库中
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
如果数据是字符型,必须使用单引号或者双引号,如:"value"。
js // 插入数据 let sql = 'insert into messege set userId=?,content=?,createTime=?' db.query(sql, [req.body.userId,req.body.content, req.body.createTime], (err, result) => { // 回调函数 第一个为返回的错误信息 console.log(result); // ==1 表示数据插入成功 if(result.affectedRows == 1){ res.send({ messege : '数据插入成功', code : 200, data }) } })
报错:Column 'userId' cannot be null
解决:传递参数时写错key了
查询聊天记录
js app.get('/',(req, res)=> { db.query('select * from messege', (err, result) => { // console.log(result); res.send({ messege : '数据获取成功', code : 200, data : result }) }) })
使用Promise封装数据库操作
后续可能我们会对数据库进行好几层的操作,一层套一层,会造成回调地狱,这时候代码很难阅读 所以要进行promise封装,变成同步操作 ```js // 封装 DbUtils.js db.async = {}
// promise封装 db.async.query = (sql, params) => { return new Promise((resolve, reject) => { db.query(sql, params, (err, rows) => { resolve({err, rows}) }) }) }
js // TestRouter.js router.get('/test', async (req, res) => { // 同步写法 // 把回调函数变成可异步执行 添加async let out = await db.async.query('select * from admin', [])
res.send({ id : genid.NextId(), out }) }) ```