nodejs連接mysql

一、安裝

npm install mysql

二、引入模塊,并連接mysql

varmysql? =require('mysql');//調(diào)用MySQL模塊//創(chuàng)建一個connectionvarconnection = mysql.createConnection({host:'127.0.0.1',//主機(jī)user? ? :'root',//MySQL認(rèn)證用戶名password :'abcd',//MySQL認(rèn)證用戶密碼port:'3306',//端口號database:'school',//數(shù)據(jù)庫名稱});//創(chuàng)建一個connectionconnection.connect(function(err){if(err){console.log('[query] - :'+err);return;? ? }console.log('[connection connect]? succeed!');});//執(zhí)行SQL語句connection.query('SELECT 1 + 1 AS solution',function(err, rows, fields){if(err) {console.log('[query] - :'+err);return;? ? }console.log('The solution is: ', rows[0].solution);? });//關(guān)閉connectionconnection.end(function(err){if(err){return;? ? }console.log('[connection end] succeed!');});

test->插入數(shù)據(jù)

varmysql? =require('mysql');varconnection = mysql.createConnection({host:'192.168.0.200',user:'root',password:'abcd',port:'3306',database:'nodesample', }); connection.connect();varuserAddSql ='INSERT INTO userinfo(Id,UserName,UserPass) VALUES(0,?,?)';varuserAddSql_Params = ['Wilson','abcd'];//增connection.query(userAddSql,userAddSql_Params,function(err, result){if(err){console.log('[INSERT ERROR] - ',err.message);return;? ? ? ? }console.log('--------------------------INSERT----------------------------');//console.log('INSERT ID:',result.insertId);? ? ? ? console.log('INSERT ID:',result);console.log('-----------------------------------------------------------------\n\n');? });connection.end();

從執(zhí)行結(jié)果可以看出,result中包含一些有用的信息,affectedRows(受影響的行數(shù))insertId(插入的主鍵ID)等等。

有受影響的行數(shù)和插入數(shù)據(jù)的ID,就可以很方便進(jìn)行后續(xù)的一些操作(比如判斷是否成功或者繼續(xù)根據(jù)插入數(shù)據(jù)的ID進(jìn)行其它操作)

test->查詢數(shù)據(jù)

varmysql? =require('mysql');varconnection = mysql.createConnection({host:'192.168.0.200',user:'root',password:'abcd',port:'3306',database:'nodesample', }); connection.connect();varuserGetSql ='SELECT * FROM userinfo';//查connection.query(userGetSql,function(err, result){if(err){console.log('[SELECT ERROR] - ',err.message);return;? ? ? ? }console.log('--------------------------SELECT----------------------------');console.log(result);console.log('-----------------------------------------------------------------\n\n');? });connection.end();

從查詢出來的結(jié)果可以看出,result返回了一個JSON格式的數(shù)據(jù)

三、結(jié)束數(shù)據(jù)庫連接兩種方法和區(qū)別

前面的示例中我在結(jié)尾處都會調(diào)用一個connection.end()方法,這個方法connection.connect()對應(yīng),一個開始,一個結(jié)束!

結(jié)束連接其實(shí)有兩種方法end(),destory();

end()

end()方法在queries都結(jié)束后執(zhí)行,end()方法接收一個回調(diào)函數(shù),queries執(zhí)行出錯,仍然后結(jié)束連接,錯誤會返回給回調(diào)函數(shù)err參數(shù),可以在回調(diào)函數(shù)中處理!

destory()

比較暴力,沒有回調(diào)函數(shù),即刻執(zhí)行,不管queries是否完成!

四、連接池Pooling connections(生產(chǎn)環(huán)境請使用連接池)

1.連接池的創(chuàng)建,使用createPool方法,options和createConntion一致,可以監(jiān)聽connection事件。

varmysql =require('mysql');//創(chuàng)建連接池varpool? = mysql.createPool({host:'192.168.0.200',user:'root',password:'abcd'});

連接池可以直接使用,也可以共享一個連接或管理多個連接(引用官方示例)

//直接使用pool.query('SELECT 1 + 1 AS solution',function(err, rows, fields){if(err)throwerr;console.log('The solution is: ', rows[0].solution);});//共享pool.getConnection(function(err, connection){// connected! (unless `err` is set)});

3.釋放

調(diào)用connection.release()方法,會把連接放回連接池,等待其它使用者使用!

varmysql =require('mysql');varpool? = mysql.createPool({host:'192.168.0.200',user:'root',password:'abcd',port:'3306',database:'nodesample'});pool.getConnection(function(err, connection){? ? connection.query('SELECT * FROM userinfo;',function(err, result){console.log(result);? ? ? ? connection.release();? ? });? ? connection.query('SELECT * FROM userinfo;',function(err, result){console.log(result);? ? ? ? connection.release();? ? });});

五、斷線重連

數(shù)據(jù)庫可以因?yàn)楦鞣N原因?qū)е逻B接不上,這種就必須有重連接機(jī)制!

主要判斷errorcode:PROTOCOL_CONNECTION_LOST

varmysql =require('mysql');vardb_config = {host:'192.168.0.200',user:'root',password:'abcd',port:'3306',database:'nodesample'};varconnection;functionhandleDisconnect(){? connection = mysql.createConnection(db_config);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? connection.connect(function(err){if(err) {console.log("進(jìn)行斷線重連:"+newDate());? ? ? setTimeout(handleDisconnect,2000);//2秒重連一次return;? ? }console.log("連接成功");? ? });? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? connection.on('error',function(err){console.log('db error', err);if(err.code ==='PROTOCOL_CONNECTION_LOST') {? ? ? handleDisconnect();? ? ? ? ? ? ? ? ? ? ? ? ? ? }else{throwerr;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }? });}handleDisconnect();

作者:victor

鏈接:http://www.itdecent.cn/p/e875856a588a

來源:簡書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Nodejs連接mysql的增、刪、改、查操作 一、準(zhǔn)備 nodejs的教程,大多以操作mongodb為示例。但是...
    Utopi_a閱讀 639評論 0 7
  • Node.js與MySQL交互操作有很多庫,具體可以在 https://www.npmjs.com/package...
    go含羞草閱讀 1,477評論 0 0
  • 一、安裝 二、引入模塊,并連接mysql test->插入數(shù)據(jù) 從執(zhí)行結(jié)果可以看出,result中包含一些有用的信...
    Veb閱讀 822評論 0 20
  • 可以看下稻城亞丁的旅游線路圖,隨便拍的,湊合看哈,所謂的短線就是終點(diǎn)珍珠海,長線終點(diǎn)是五色海。這個景區(qū)一般至少...
    壓縮水果閱讀 451評論 0 2
  • 昨天,在網(wǎng)上看到兩則新聞,既痛心又氣憤。 一則是鄭州一位有五個子女的九旬老太被兒子扔在公交車站,就不再管她,后被好...
    gl菲菲閱讀 359評論 4 10

友情鏈接更多精彩內(nèi)容