Node中使用mysql模組遇到的問題

來源:互聯網
上載者:User

標籤:

  Node的mysql模組,本人的感受就是不好用,各種報錯,各種坑,有一個問題困擾了我很久,也不知道是不是我使用的方式不對,不過後來用easymysql模組解決了,我才深信這是一個坑。

問題描述:

  假設有這麼一個資料表table,它有兩個欄位index和name,在localhost:3000首頁有一個按鈕,上面寫著“更新”,當我點擊更新後會POST到localhost:3000/update,然後後台串連資料庫進行更新操作每一條記錄的name為“gdt”,更新完畢後回到首頁,再重新按一下“更新”按鈕,就會報錯誤,如下:

“{ [Error: Cannot enqueue Query after invoking quit.] code: ‘PROTOCOL_ENQUEUE_AFTER_QUIT‘, fatal: false }”

 

  下面代碼,省略了模組的引入以及資料庫的串連操作,我使用的是非同步流程式控制制Async來使得非同步查詢變成同步查詢,在流程結束的最後connection會end,路由會重新導向到localhost:3000,講道理的話當我重新按“更新”按鈕時會繼續進行更新操作,而不是報錯

exports.update = function(req, res) {    //獲得需要所有記錄資訊    function getInfo() {        return new Promise((resolve, reject) => {            connection.query(‘SELECT `index`,`name` from table‘, function(err, result) {                if (err) {                    console.log(err);                } else {                    resolve(result);                }            })        })    }    // 將每一項的名字更新為gdt    function updateName(info) {        return new Promise((resolve, reject) => {            var index = info[‘index‘];            connection.query("UPDATE  `table` SET `tableB`.`name` = ‘gdt‘ WHERE `table`.`index` =?", index, function(err, result) {                if (err) {                    console.log(err);                } else {                    resolve(‘更新成功‘);                }            })        })    }    async function update() {
 let result = ‘‘; //篩選出在公屏發言出現的環球uid和其對應的index var getinfoResult = await getInfo(); for (let i = 0; i < getinfoResult.length; i++) { var updateResult = await updateName(getinfoResult[i]); console.log(updateResult); }
return result?result:‘success‘; } update().then(function(result) { console.log(result); //斷開資料庫連接 connection.end(); //回到首頁 res.redirect(‘/‘); })}

  這個問題我查閱了好多資料,問了好多人都沒有得到解決,後來改用了easymysql模組就解決了,非同步流程式控制制結束後頁面重新導向到首頁,重新按下“更新”會執行更新操作,不會報錯!

  上面的代碼並沒有改成easymysql的文法,關於easymysql的用法可以參閱 https://github.com/aleafs/easymysql,不過還是建議Node項目結合像MongoDB這樣的NoSQL資料庫,要不是公司業務要求我是不會使用mysql的,囧~

 

Node中使用mysql模組遇到的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.