ノードを使ってデータベースに接続|青少年合宿記


テーマ: 凝縮夜紫

ハイライト: a11y-dark

仲間ノート作成活動「第5期青少年合宿」に参加して15日目です。

モジュールをインストールする

npm 私は -S を表現します

npm i body-parser -S // ポストリクエストパラメータプラグインを解析します

データ・モデル

id : 消息的唯一标识,
userId : 用户id,
content : '我是聊天内容' ,
creatTime : 消息创建时间

ポストリクエストパラメータを設定する

app.use(bodyParser.urlencoded({ 拡張: false })) app.use(bodyParser.json())

データベース

ここでのデータはサーバーのメモリに保存されますが、データ量が多すぎるとブラウザのメモリを大量に消費し、サーバーのパフォーマンスに影響を与えたり、サーバーが麻痺したりする可能性がありますので、データはデータベースに保存する必要があります。

使用

プラグインをインストールする

npm i mysql2 -S

起動する

ターミナルで mysql を起動 -uroot -p123456

データベースを表示 データベースを表示します。

データベースに接続する

導入: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 }) } })

エラー: 列 'userId' を null にすることはできません
解決策: パラメータを渡すときに間違ったキーが書き込まれます

チャット履歴のクエリ

js app.get('/',(req, res)=> { db.query('select * from messege', (err, result) => { // console.log(result); res.send({ messege : '数据获取成功', code : 200, data : result }) }) })

Promise を使用してデータベース操作をカプセル化する

将来的には、データベースに対して複数の層の操作を 1 層ずつ実行する可能性があり、コールバック地獄が発生する可能性があります。このとき、コードが読みにくいため、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