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

文章讲述了在Node.js环境中,使用Express框架和Body-parser中间件处理POST请求,以及如何安装和配置MySQL2库来保存数据到数据库中。还提到了数据模型的设计,并展示了如何解决插入数据时的错误。此外,文章讨论了使用Promise封装数据库操作以避免回调地狱,提高代码可读性。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值