tema: condensada-noche-púrpura
resaltado: a11y-oscuro
Este es el día 15 de mi participación en la actividad de creación de notas complementarias "Quinto campo de entrenamiento juvenil"
instalar el módulo
npm expreso -S
npm i body-parser -S // analizar el complemento del parámetro de solicitud posterior
modelo de datos
id : 消息的唯一标识,
userId : 用户id,
content : '我是聊天内容' ,
creatTime : 消息创建时间
Configurar los parámetros de solicitud de publicación
aplicación.use(bodyParser.urlencoded({ extendido: falso })) aplicación.use(bodyParser.json())
base de datos
Los datos aquí se almacenan en la memoria del servidor. Si la cantidad de datos es demasiado grande, consumirá mucha memoria del navegador, lo que afectará el rendimiento del servidor e incluso provocará que el servidor se paralice, por lo que los datos deben guardarse en la base de datos.
usar
instalar complemento
npm i mysql2 -S
puesta en marcha
Inicie mysql en la terminal -uroot -p123456
Ver base de datos mostrar bases de datos;
Conéctese a la base de datos
Introducir:const mysql = require('mysql2')
conectar:let db = mysql.createConnection({ // 配置 host : 'localhost', // ip地址 port : '3306', // 端口 user: 'root', // 数据库账号密码 password : 123456, database : 'test' // 数据库名字 })
Crear ejecución de tabla en la terminal
Primero ingrese la base de datos a operar para 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;`
mostrar la tabla show tables
Insertar datos en la base de datos.
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
Si los datos son de tipo carácter, deberás utilizar comillas simples o dobles, como por ejemplo: “valor”.
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 }) } })
Error: la columna 'userId' no puede ser nula
Solución: se escribe una clave incorrecta al pasar parámetros
Consultar historial de chat
js app.get('/',(req, res)=> { db.query('select * from messege', (err, result) => { // console.log(result); res.send({ messege : '数据获取成功', code : 200, data : result }) }) })
Utilice Promise para encapsular operaciones de bases de datos
En el futuro, es posible que realicemos varias capas de operaciones en la base de datos, una capa tras otra, lo que provocará un infierno de devolución de llamada. En este momento, el código es difícil de leer, por lo que es necesario realizar una encapsulación de promesa y convertirla en una operación sincrónica. ```js // Encapsular 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 }) }) ```