Node中使用mysql模块遇到的问题
Node的mysql模塊,本人的感受就是不好用,各種報(bào)錯(cuò),各種坑,有一個(gè)問題困擾了我很久,也不知道是不是我使用的方式不對,不過后來用easymysql模塊解決了,我才深信這是一個(gè)坑。
問題描述:
假設(shè)有這么一個(gè)數(shù)據(jù)表table,它有兩個(gè)字段index和name,在localhost:3000主頁有一個(gè)按鈕,上面寫著“更新”,當(dāng)我點(diǎn)擊更新后會(huì)POST到localhost:3000/update,然后后臺(tái)連接數(shù)據(jù)庫進(jìn)行更新操作每一條記錄的name為“gdt”,更新完畢后回到主頁,再重新按一下“更新”按鈕,就會(huì)報(bào)錯(cuò)誤,如下:
“{ [Error: Cannot enqueue Query after invoking quit.] code: 'PROTOCOL_ENQUEUE_AFTER_QUIT', fatal: false }”
?
下面代碼,省略了模塊的引入以及數(shù)據(jù)庫的連接操作,我使用的是異步流程控制Async來使得異步查詢變成同步查詢,在流程結(jié)束的最后connection會(huì)end,路由會(huì)重定向到localhost:3000,講道理的話當(dāng)我重新按“更新”按鈕時(shí)會(huì)繼續(xù)進(jìn)行更新操作,而不是報(bào)錯(cuò)
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);}})})}// 將每一項(xiàng)的名字更新為gdtfunction 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?=?'';//篩選出在公屏發(fā)言出現(xiàn)的環(huán)球uid和其對應(yīng)的indexvar 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);//斷開數(shù)據(jù)庫連接connection.end();//回到主頁res.redirect('/');}) }
這個(gè)問題我查閱了好多資料,問了好多人都沒有得到解決,后來改用了easymysql模塊就解決了,異步流程控制結(jié)束后頁面重定向到首頁,重新按下“更新”會(huì)執(zhí)行更新操作,不會(huì)報(bào)錯(cuò)!
上面的代碼并沒有改成easymysql的語法,關(guān)于easymysql的用法可以參閱 https://github.com/aleafs/easymysql,不過還是建議Node項(xiàng)目結(jié)合像MongoDB這樣的NoSQL數(shù)據(jù)庫,要不是公司業(yè)務(wù)要求我是不會(huì)使用mysql的,囧~
?
轉(zhuǎn)載于:https://www.cnblogs.com/DTBelieve/p/5656277.html
總結(jié)
以上是生活随笔為你收集整理的Node中使用mysql模块遇到的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA程序设计心得001
- 下一篇: 关联查询一张小表。对性能有影响吗(mys