thème : condensé-nuit-violet
point culminant : a11y-dark
C'est le 15ème jour de ma participation à l'activité de création de notes d'accompagnement du "Cinquième camp d'entraînement des jeunes".
installer le module
npm j'exprime -S
npm i body-parser -S // analyser le plugin de paramètre de demande de publication
modèle de données
id : 消息的唯一标识,
userId : 用户id,
content : '我是聊天内容' ,
creatTime : 消息创建时间
Configurer les paramètres de demande de publication
app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json())
base de données
Les données ici sont stockées dans la mémoire du serveur. Si la quantité de données est trop importante, cela consommera beaucoup de mémoire du navigateur, affectant les performances du serveur et provoquant même la paralysie du serveur, donc les données doivent être enregistrées dans la base de données.
utiliser
installer le plugin
npm je mysql2 -S
démarrer
Démarrez MySQL dans le terminal -uroot -p123456
Afficher la base de données Afficher les bases de données ;
Connectez-vous à la base de données
Introduire:const mysql = require('mysql2')
connecter:let db = mysql.createConnection({ // 配置 host : 'localhost', // ip地址 port : '3306', // 端口 user: 'root', // 数据库账号密码 password : 123456, database : 'test' // 数据库名字 })
Créer une table exécutée dans le terminal
Entrez d'abord dans la base de données à exploiter pour 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;`
afficher le tableau show tables
Insérer des données dans la base de données
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
Si les données sont de type caractère, vous devez utiliser des guillemets simples ou doubles, tels que : "valeur".
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 }) } })
Erreur : la colonne « userId » ne peut pas être nulle
Solution : une mauvaise clé est écrite lors du passage des paramètres
Interroger l'historique des discussions
js app.get('/',(req, res)=> { db.query('select * from messege', (err, result) => { // console.log(result); res.send({ messege : '数据获取成功', code : 200, data : result }) }) })
Utiliser Promise pour encapsuler les opérations de base de données
À l'avenir, nous pourrions effectuer plusieurs couches d'opérations sur la base de données, une couche après l'autre, ce qui provoquerait un enfer de rappel. À l'heure actuelle, le code est difficile à lire, nous devons donc effectuer l'encapsulation des promesses et devenir une opération synchrone. ``js // Encapsuler 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 }) }) ```