最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js與MySQL交互操作及其注意事項(xiàng)

 更新時間:2016年10月05日 09:57:18   作者:shibaxiong  
這篇文章給大家主要介紹了Node.js與MySQL交互操作及其注意事項(xiàng),非常的詳細(xì),有相同需求的小伙伴可以參考下

node.js作為服務(wù)端的js運(yùn)行環(huán)境已經(jīng)出現(xiàn)了有幾年了,最近我有個朋友也在做這方面的開發(fā),但是也是剛剛接觸,遇到了很多坑。前幾天他們在操作數(shù)據(jù)庫的時候出現(xiàn)了點(diǎn)問題,后來我們一起看了看,其實(shí)都是node本身機(jī)制的一些問題,這里總結(jié)一下給新手做借鑒。

我朋友的數(shù)據(jù)庫采用的是MySQL。(至于為什么不用mongoDB,這個是公司上層選型的結(jié)果,因?yàn)楹芏嘈率峙笥阉坪蹩偸怯X的node.js就是應(yīng)該和mongoDB聯(lián)系在一起,所以這里簡單說下)。我后來寫了一個簡單的小例子,整個小例子使用了express框架,node_modules里面已經(jīng)下載好了express和ejs模板。先來看下目錄:

server.js =》 node.js的服務(wù)器啟動文件

db.js =》 數(shù)據(jù)庫操作文件

views =》 存放模板文件,也就是所有的頁面存放的地方

public =》 存放所有靜態(tài)資源的地方,比如css js images之類的

首先介紹一下node.js連接MySQL的步驟,第一步,需要安裝一個叫做MySQL的npm包,這個包是官方提供的,穩(wěn)定性是可以保證的,當(dāng)然,也還有其他的npm包,這里我們只使用mysql包。安裝的方法很簡單了,輸入指令 npm install mysql --save,等待下載完成.

看到這個樣子,那就是安裝成功了。

然后我們打開db.js文件,在里面寫入數(shù)據(jù)庫中操作必須的一些代碼,看下圖:

代碼很少,意思也很明顯,第一步需要引入以mysql包,然后我們創(chuàng)建一個空對象,并且給他賦值一個叫query的方法,這個方法接受兩個參數(shù),第一個參數(shù)是你查詢數(shù)據(jù)時候的sql語句,第二個參數(shù)是獲取查詢結(jié)果的回調(diào)函數(shù)。

再看函數(shù)內(nèi)部,第一塊代碼是用來設(shè)置操作mysql的配置的:

host表示mysql安裝的地址,因?yàn)槲沂潜镜氐臄?shù)據(jù)庫,所以直接使用localhost

user表示mysql的用戶名

password表示mysql的密碼

database表示你要選擇操作的具體的庫的名字

port表示端口,可不填,默認(rèn)就是3306

mysql.createConnection的返回值connection是我們接下來操作mysql的一個具體的對象,所有的操作方法都是基于他的。

調(diào)用connection的connect方法判斷連接是否成功,如果失敗,則把錯誤信息打印出來,并且停止運(yùn)行。

調(diào)用connection的query方法來直接向數(shù)據(jù)庫發(fā)送sql語句,并且把用回調(diào)函數(shù)返回結(jié)果,其中回調(diào)函數(shù)中有三個參數(shù),第一參數(shù)是錯誤對象,如果操作失敗,則會停止并打印錯誤信息,第二參數(shù)是具體的返回的結(jié)果,正常情況下是一個數(shù)組,里面包含很多json,第三個參數(shù)也是一個數(shù)組,里面包含著最每個數(shù)據(jù)的解釋,比如當(dāng)前數(shù)據(jù)屬于哪個庫,那張表等等。我們使用最多的自然是第二個參數(shù)了

當(dāng)數(shù)據(jù)庫操作結(jié)束以后關(guān)閉連接

整個過程很簡單,只是其中有兩個問題,第一個是數(shù)據(jù)庫連接丟失的問題,不知道有沒有人碰到過,第一次訪問首頁的時候,連接數(shù)據(jù)庫正常,第二次訪問首頁,數(shù)據(jù)庫連接不上了,會報(bào)錯說連接丟失。這個原因是我們每操作完一次數(shù)據(jù)庫就關(guān)閉了數(shù)據(jù)庫連接,再次訪問的時候就找不到連接了,但是連接又不能不關(guān)閉,有人可能覺得奇怪,每次訪問首頁時候都會訪問db.js文件,不是每次都會有一個新連接產(chǎn)生嗎?是的,只是我最開始的時候生成連接的那段代碼并沒有放到db.query的函數(shù)中,而是放在外面,如下圖:

這樣就導(dǎo)致連接只生成一次,關(guān)閉了以后,第二采訪得不到連接。把它放在函數(shù)里面以后,使用exports對外暴露接口。每次訪問首頁,都會重新走一遍創(chuàng)建連接的過程,每次都能拿到一個新的連接,這樣訪問就沒有問題了。其實(shí)項(xiàng)目中可以直接使用連接池。省去了很多麻煩。

第二個問題是我們在server.js中引入了db.js

此時大家可能看到了,mysql.query有兩個參數(shù),第一個是sql,第二個是回調(diào)函數(shù),回調(diào)函數(shù)有一個result的參數(shù),其實(shí)他就是數(shù)據(jù)庫查詢出來的結(jié)果。有人會說為什么不直接在db.js中使用return,把查詢結(jié)果返回,搞什么回調(diào)??!

其實(shí)這里就是node.js的異步造成的一些問題了,如果我們把server.js中的代碼改成下圖

因?yàn)槲覀兛吹搅薽ysql包的query方法是異步操作,這就導(dǎo)致下面的res.render()方法不會等待他把結(jié)果查詢出來以后再執(zhí)行,往往是結(jié)果還沒出來,就已經(jīng)開始渲染頁面,但是數(shù)據(jù)又沒有得到,所以就會報(bào)錯了。因此只好傳送了一個回調(diào)函數(shù)進(jìn)去,在mysql的query方法結(jié)束以后,把結(jié)果通過參數(shù)傳入到我們自己寫的回調(diào)函數(shù)中,這樣我們就能在回調(diào)函數(shù)里得到結(jié)果了。然后再執(zhí)行渲染。當(dāng)然處理這個問題還可以引入第三方包 async來解決異步問題,具體看個人了。

相關(guān)文章

  • node.js中的fs.fchmod方法使用說明

    node.js中的fs.fchmod方法使用說明

    這篇文章主要介紹了node.js中的fs.fchmod方法使用說明,本文介紹了fs.fchmod的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • jenkins配置不同版本nodeJS保姆級教程

    jenkins配置不同版本nodeJS保姆級教程

    Jenkins確實(shí)是個好工具,今天在配置vue項(xiàng)目的時侯,看著別人配置好的東西,可是我就明明在配置時,發(fā)現(xiàn)缺少node的版本選擇,這篇文章主要給大家介紹了關(guān)于jenkins配置不同版本nodeJS的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • 參考?EventEmitter實(shí)現(xiàn)一個簡單的訂閱發(fā)布功能函數(shù)

    參考?EventEmitter實(shí)現(xiàn)一個簡單的訂閱發(fā)布功能函數(shù)

    這篇文章主要為大家介紹了參考?EventEmitter實(shí)現(xiàn)一個簡單的訂閱發(fā)布功能函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • yarn安裝依賴速度太慢的解決辦法

    yarn安裝依賴速度太慢的解決辦法

    本文介紹如何通過修改配置文件解決yarn安裝依賴速度太慢的問題,文中通過圖文結(jié)合講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • Node.js中使用socket創(chuàng)建私聊和公聊聊天室

    Node.js中使用socket創(chuàng)建私聊和公聊聊天室

    這篇文章主要介紹了Node.js中使用socket創(chuàng)建私聊和公聊聊天室的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • 詳解IWinter 一個路由轉(zhuǎn)控制器的 Nodejs 庫

    詳解IWinter 一個路由轉(zhuǎn)控制器的 Nodejs 庫

    本篇文章主要介紹了詳解IWinter 一個路由轉(zhuǎn)控制器的 Nodejs 庫,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • node+express框架中連接使用mysql(經(jīng)驗(yàn)總結(jié))

    node+express框架中連接使用mysql(經(jīng)驗(yàn)總結(jié))

    這篇文章主要介紹了node+express框架中連接使用mysql(經(jīng)驗(yàn)總結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • express框架+bootstrap美化ejs模板實(shí)例分析

    express框架+bootstrap美化ejs模板實(shí)例分析

    這篇文章主要介紹了express框架+bootstrap美化ejs模板,結(jié)合實(shí)例形式分析了express框架引入bootstrap結(jié)合ejs模版引擎相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2023-05-05
  • Node.js版本發(fā)布策略頻率與穩(wěn)定性的平衡

    Node.js版本發(fā)布策略頻率與穩(wěn)定性的平衡

    這篇文章主要為大家介紹了Node.js版本發(fā)布策略頻率與穩(wěn)定性的平衡,幫助大家大家更清晰了解node發(fā)展史,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 如何使用docker直接運(yùn)行不同版本nodejs命令

    如何使用docker直接運(yùn)行不同版本nodejs命令

    這篇文章主要介紹了如何使用docker直接運(yùn)行不同版本nodejs命令,在不支持高版本Node.js的舊版操作系統(tǒng)上,可以通過Docker容器技術(shù)解決兼容性問題,需要的朋友可以參考下
    2024-10-10

最新評論

望江县| 鄂温| 屯昌县| 溧水县| 内黄县| 福建省| 漳州市| 阳原县| 宽城| 湄潭县| 水富县| 汝城县| 黑龙江省| 洮南市| 永胜县| 濉溪县| 海原县| 建阳市| 共和县| 崇仁县| 长武县| 安平县| 清丰县| 晴隆县| 万荣县| 安化县| 永胜县| 新营市| 乌兰察布市| 上虞市| 中方县| 甘孜县| 庄浪县| 海晏县| 宣武区| 辽源市| 九台市| 庆云县| 赣州市| 开化县| 阿拉善右旗|