nodejs入門教程五:連接數(shù)據(jù)庫(kù)的方法分析
本文實(shí)例講述了nodejs入門教程之連接數(shù)據(jù)庫(kù)的方法。分享給大家供大家參考,具體如下:
參考文章鏈接: nodejs連接mysql
1.準(zhǔn)備工作
在nodejs中沒(méi)有mysql模塊,但npm中提供了mysql,所以可以使用npm安裝mysql
命令:npm install mysql, 會(huì)生成 node_modules 文件夾 ,如圖

執(zhí)行后發(fā)現(xiàn)報(bào)了一個(gè)警告,說(shuō)沒(méi)有package.json 這個(gè)文件,只需要執(zhí)行 npm init -f 的命令就會(huì)生成一個(gè)這個(gè)文件

2.直接連接數(shù)據(jù)庫(kù)
mysql.createConnection(Object) 方法與 mysql.createPool(Object)的參數(shù)
| host | 連接數(shù)據(jù)庫(kù)所在的主機(jī)名. (默認(rèn): localhost) |
| port | 連接端口. (默認(rèn): 3306) |
| localAddress | 用于TCP連接的IP地址. (可選) |
| socketPath | 鏈接到unix域的路徑。在使用host和port時(shí)該參數(shù)會(huì)被忽略. |
| user | MySQL用戶的用戶名. |
| password | MySQL用戶的密碼. |
| database | 鏈接到的數(shù)據(jù)庫(kù)名稱 (可選). |
| charset | 連接的字符集. (默認(rèn): 'UTF8_GENERAL_CI'.設(shè)置該值要使用大寫(xiě)!) |
| timezone | 儲(chǔ)存本地時(shí)間的時(shí)區(qū). (默認(rèn): 'local') |
| stringifyObjects | 是否序列化對(duì)象. See issue #501. (默認(rèn): 'false') |
| insecureAuth | 是否允許舊的身份驗(yàn)證方法連接到數(shù)據(jù)庫(kù)實(shí)例. (默認(rèn): false) |
| typeCast | 確定是否講column值轉(zhuǎn)換為本地JavaScript類型列值. (默認(rèn): true) |
| queryFormat | 自定義的查詢語(yǔ)句格式化函數(shù). |
| supportBigNumbers | 數(shù)據(jù)庫(kù)處理大數(shù)字(長(zhǎng)整型和含小數(shù)),時(shí)應(yīng)該啟用 (默認(rèn): false). |
| bigNumberStrings | 啟用 supportBigNumbers和bigNumberStrings 并強(qiáng)制這些數(shù)字以字符串的方式返回(默認(rèn): false). |
| dateStrings | 強(qiáng)制日期類型(TIMESTAMP, DATETIME, DATE)以字符串返回,而不是一javascript Date對(duì)象返回. (默認(rèn): false) |
| debug | 是否開(kāi)啟調(diào)試. (默認(rèn): false) |
| multipleStatements | 是否允許在一個(gè)query中傳遞多個(gè)查詢語(yǔ)句. (Default: false) |
| flags | 鏈接標(biāo)志. |
連接數(shù)據(jù)庫(kù)
var mysql = require('mysql'); //調(diào)用MySQL模塊
//創(chuàng)建一個(gè)connection
var connection = mysql.createConnection({
host: '192.168.3.3', //主機(jī)
user: 'root', //MySQL認(rèn)證用戶名
password: 'x5', //MySQL認(rèn)證用戶密碼
database: 'dason_yu',
port: '3306' //端口號(hào)
});
//創(chuàng)建一個(gè)connection
connection.connect(function(err){
if(err){
console.log('[query] - :'+err);
return;
}
console.log('[connection connect] succeed!');
});
//執(zhí)行sql語(yǔ)句
var userAddSql = 'insert into user (id,name,money) values(?,?,?)';
var param = [3,'ccc',200];
/**
* 執(zhí)行所有類型的 sql 語(yǔ)句
* query(sql,arr[],function)
* @parms: sql:sql語(yǔ)句 arr: 填充站位符的數(shù)組,可以缺省
* function: 回調(diào)函數(shù),result: 結(jié)果集,對(duì)象組成的數(shù)組
*/
connection.query(userAddSql,param,function(err,rs){
if(err){
console.log('insert err:',err.message);
return;
}
console.log('insert success');
});
//關(guān)閉connection
connection.end(function(err){
if(err){
console.log(err.toString());
return;
}
console.log('[connection end] succeed!');
});
3.使用連接池連接數(shù)據(jù)庫(kù)
將下面代碼寫(xiě)到 httpServer.js 文件中
使用在命令行窗口中 node httpServer.js 運(yùn)行
var mysql = require('mysql'); //用于創(chuàng)建數(shù)據(jù)庫(kù)連接
var pool = mysql.createPool({// 創(chuàng)建數(shù)據(jù)庫(kù)連接池
host : '127.0.0.1' ,
user : 'root' ,
password : 'root' ,
database : 'dason',
multipleStatements: true
});
/**
* 獲取數(shù)據(jù)庫(kù)連接
* @parms: err:異常 connnection:數(shù)據(jù)庫(kù)連接對(duì)象
*
*/
pool.getConnection(function(err,connection){
if(err){
console.log(err);
}
/**
* 執(zhí)行所有類型的 sql 語(yǔ)句
* query(sql,arr[],function)
* @parms: sql:sql語(yǔ)句 arr: 填充站位符的數(shù)組,可以缺省
* function: 回調(diào)函數(shù),result: 結(jié)果集,對(duì)象組成的數(shù)組
*/
connection.query('SELECT * FROM user',function(err,result){
console.log(result);
connection.release();//將連接放回連接池
});
});
結(jié)果:
[ RowDataPacket { id: 1, name: 'a', email: 'a@123' },
RowDataPacket { id: 2, name: 'b', email: 'b@123' },
RowDataPacket { id: 4, name: 'd', email: 'd@123' },
RowDataPacket { id: 5, name: 'e', email: 'e@123' },
RowDataPacket { id: 6, name: 'f', email: 'f@123' },
RowDataPacket { id: 3, name: 'c', email: 'c@123' },
RowDataPacket { id: 7, name: 'g', email: 'g@123' } ]
4. end() 與 destroy()、release()
end() 接受一個(gè)回調(diào)函數(shù),并且會(huì)在query結(jié)束之后才觸發(fā),如果query出錯(cuò),仍然會(huì)終止鏈接,錯(cuò)誤會(huì)傳遞到回調(diào)函數(shù)中處理。
destroy() 立即終止數(shù)據(jù)庫(kù)連接,即使還有query沒(méi)有完成,之后的回調(diào)函數(shù)也不會(huì)在觸發(fā)。
release() 將連接放回連接池中。
5.package.json

npm install express –save
npm install express –save-dev
上面代碼表示單獨(dú)安裝express模塊,
–save參數(shù)表示將該模塊寫(xiě)入dependencies屬性,
–save-dev表示將該模塊寫(xiě)入devDependencies屬性。
希望本文所述對(duì)大家nodejs程序設(shè)計(jì)有所幫助。
- nodejs入門教程四:URL相關(guān)模塊用法分析
- nodejs入門教程三:調(diào)用內(nèi)部和外部方法示例
- nodejs入門教程二:創(chuàng)建一個(gè)簡(jiǎn)單應(yīng)用示例
- nodejs入門教程一:概念與用法簡(jiǎn)介
- NodeJS測(cè)試框架mocha入門教程
- Nodejs極簡(jiǎn)入門教程(三):進(jìn)程
- Nodejs極簡(jiǎn)入門教程(二):定時(shí)器
- Nodejs極簡(jiǎn)入門教程(一):模塊機(jī)制
- nodejs教程 安裝express及配置app.js文件的詳細(xì)步驟
- NodeJS框架Express的模板視圖機(jī)制分析
- Nodejs的express使用教程
- nodejs入門教程六:express模塊用法示例
相關(guān)文章
PHP和NodeJs開(kāi)發(fā)的應(yīng)用如何共用Session
這篇文章主要介紹了PHP和NodeJs開(kāi)發(fā)的應(yīng)用如何共用Session的相關(guān)資料及思路,需要的朋友可以參考下2015-04-04
node.js中的fs.realpath方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.realpath方法使用說(shuō)明,本文介紹了fs.realpath的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12
Node.js中readline模塊實(shí)現(xiàn)終端輸入
本文主要介紹了Node.js中readline模塊實(shí)現(xiàn)終端輸入,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
node錯(cuò)誤處理與日志記錄的實(shí)現(xiàn)
這篇文章主要介紹了node錯(cuò)誤處理與日志記錄的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
express框架+bootstrap美化ejs模板實(shí)例分析
這篇文章主要介紹了express框架+bootstrap美化ejs模板,結(jié)合實(shí)例形式分析了express框架引入bootstrap結(jié)合ejs模版引擎相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2023-05-05
nodejs同步調(diào)用獲取mysql數(shù)據(jù)時(shí)遇到的大坑
今天小編就為大家分享一篇關(guān)于nodejs同步調(diào)用獲取mysql數(shù)據(jù)時(shí)遇到的大坑,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
用nodeJS搭建本地文件服務(wù)器的幾種方法小結(jié)
本篇文章主要介紹了用nodeJS搭建本地文件服務(wù)器的幾種方法小結(jié),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03

