使用node连接数据库 | 青训营笔记


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 }) }) ```

猜你喜欢

转载自blog.csdn.net/weixin_50945128/article/details/129377934