node使用mysql

安裝mysql

npm install mysql

創(chuàng)建管理mysql文件

創(chuàng)建dbManager.js
引入mysql

// 引入mysql
const mysql = require("mysql");

創(chuàng)建鏈接池

// 建立一個連接池
const db = mysql.createPool({
    // 主機(jī)地址 (默認(rèn):localhost), 本地的只能默認(rèn)為127.0.0.1
    host: "127.0.0.1", // 數(shù)據(jù)庫的IP地址(本地的或者是云服務(wù)器的都可以)
    port: "3306",
    // 用戶名
    user: "root", 
    // 密碼
    password: "12345678", 
    // 指定要操作哪個數(shù)據(jù)庫
    database: "lulu", 
    // 連接字符集(默認(rèn):‘UTF8_GENERAL_CI’,注意字符集的字母都要大寫)
    charset: "UTF8_GENERAL_CI"
});

導(dǎo)出數(shù)據(jù)庫連接池對象

module.exports = db;

使用mysql

在需要使用數(shù)據(jù)的地方引入dbManager

// 引入
const db = require("./dbManager");
創(chuàng)建表

數(shù)據(jù)庫表, 一般是在添加數(shù)據(jù)的時候創(chuàng)建, 添加數(shù)據(jù)步驟如下:

  1. 判斷有沒有該表, 如果有, 直接添加;
  2. 沒有該表進(jìn)行創(chuàng)建
  3. 創(chuàng)建完成之后再添加該數(shù)據(jù)
    代碼如下
apiRouter.post('/add',  (req,res) => {
    const {username, password} = req.body;
    const hashedPassword = bcrypt.hash(password, 10);

    // 驗證表是否存在
    const table = 'user_info';
    const checkSql = `select 1 from ${table} limit 1`;
    db.query(checkSql, error => {
        if(error) {
            // 如果不存在收壕, 就創(chuàng)建表
            let creatSql = `
                create table user_info
                (
                    id int(20) not null AUTO_INCREMENT, 
                    name varchar(20), 
                    pwd varchar(20) not null, 
                    age int(4), 
                    PRIMARY KEY (id)
                )
                `
            // 如果表不存在就建立這個表妓灌,那么可以直接用 create table if not exists tablename 這樣的指令來建立,不需要先去查詢表是否存在蜜宪。
            db.query(creatSql, (error, results) => {
                if(error){
                    // 如果創(chuàng)建失敗就返回錯誤
                    console.log(error)
                    res.status(500).send('error occurred while creating table')
                } else {
                    // 如果創(chuàng)建成功就插入數(shù)據(jù)
                    insertAction();
                }
                
            })
        } else {
            // 如果已經(jīng)存在虫埂, 則直接插入數(shù)據(jù)
            insertAction();
        }

        // 插入數(shù)據(jù)方法
        function insertAction(){
            // 插入數(shù)據(jù), 如果id是自增屬性, 則要對應(yīng)名稱插入值
            let insertSql = `
                insert into ${table} 
                    (name, pwd, age) 
                    values 
                    (${username}, '', 0)
                `;

            // 插入數(shù)據(jù)
            // let insertSql = `insert into user_info values (${id}, ${name}, '', 0)`;
            db.query(insertSql, (error, results) => {
                if(error){
                    // 創(chuàng)建失敗
                    res.status(500).send('error occurred while creating account')
                } else {
                    // 創(chuàng)建成功
                    res.status(201).send('account created successfully')
                }
                
            })
        }
    })
  })

當(dāng)然上面的insertAction方法也可以如下寫法

 // 插入數(shù)據(jù)方法
        function insertAction(){
            // 插入數(shù)據(jù), 如果id是自增屬性圃验, 則要對應(yīng)名稱插入值
            let insertSql = `
                insert into ${table} 
                    (name, pwd, age) 
                    values 
                    (?, ?, ?)
                `;
            const values = ['張三', '123', null]
            db.query(insertSql, values,  (error, results) => {
                if(error){
                    // 創(chuàng)建失敗
                    res.status(500).send('error occurred while creating account')
                } else {
                    // 創(chuàng)建成功
                    res.status(201).send('account created successfully')
                }
                
            })
        }
查詢
apiRouter.get('/login',  (req,res) => {
    const {username, password} = req.query;
    if(!username || !phoneReg.test(username)) {
      res.send({code: 1, ErrorMsg: '請?zhí)顚懻_的用戶名掉伏!'});
      return;
    }
    if(!password || password.length < 5) {
      res.send({code: 1, ErrorMsg: '請輸入密碼!'});
      return;
    }
  
    db.query('SELECT * FROM user_info WHERE username = ?', [username], (error, results) => {
      if (error) {
        res.send({code: 1, ErrorMsg: error.code });
      } else if (results.length === 0) {
        res.send({code: 1, ErrorMsg: '暫無當(dāng)前賬號澳窑,請先注冊斧散!'});
      } else {
        const user = JSON.parse(JSON.stringify(results[0]));
        bcrypt.compare(password, user.password, function(err, result) {
          // result == true
          if (err) {
            console.error(err);
            res.send({code: 1, ErrorMsg: 'Internal Server Error'});
          } else if(result) {
              const Token = createToken(user)
              //刪除密碼信息
              delete user.password;
  
              user.roles = ['admin'];
              res.send({code: 0, data: {
                token: Token,
                userInfo: user
              }})
          } else {
            res.send({code: 1, ErrorMsg: '密碼錯誤,請重試!'});
          }
        });
      }
    })
  })
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市摊聋,隨后出現(xiàn)的幾起案子鸡捐,更是在濱河造成了極大的恐慌,老刑警劉巖麻裁,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箍镜,死亡現(xiàn)場離奇詭異瞻鹏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鹿寨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來薪夕,“玉大人,你說我怎么就攤上這事『惩伲” “怎么了盐数?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長姑隅。 經(jīng)常有香客問我写隶,道長,這世上最難降的妖魔是什么讲仰? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任慕趴,我火速辦了婚禮,結(jié)果婚禮上鄙陡,老公的妹妹穿的比我還像新娘冕房。我一直安慰自己,他們只是感情好趁矾,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布耙册。 她就那樣靜靜地躺著,像睡著了一般毫捣。 火紅的嫁衣襯著肌膚如雪详拙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天蔓同,我揣著相機(jī)與錄音饶辙,去河邊找鬼。 笑死牌柄,一個胖子當(dāng)著我的面吹牛畸悬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播珊佣,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼蹋宦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咒锻?” 一聲冷哼從身側(cè)響起冷冗,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惑艇,沒想到半個月后蒿辙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拇泛,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年思灌,在試婚紗的時候發(fā)現(xiàn)自己被綠了俺叭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡泰偿,死狀恐怖熄守,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耗跛,我是刑警寧澤裕照,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站调塌,受9級特大地震影響晋南,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜羔砾,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一负间、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姜凄,春花似錦唉擂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屿聋,卻和暖如春空扎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背润讥。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工转锈, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人楚殿。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓撮慨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脆粥。 傳聞我的和親對象是個殘疾皇子砌溺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容