亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間: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)了有幾年了,最近我有個(gè)朋友也在做這方面的開(kāi)發(fā),但是也是剛剛接觸,遇到了很多坑。前幾天他們?cè)诓僮鲾?shù)據(jù)庫(kù)的時(shí)候出現(xiàn)了點(diǎn)問(wèn)題,后來(lái)我們一起看了看,其實(shí)都是node本身機(jī)制的一些問(wèn)題,這里總結(jié)一下給新手做借鑒。

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

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

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

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

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

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

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

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

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

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

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

user表示mysql的用戶名

password表示mysql的密碼

database表示你要選擇操作的具體的庫(kù)的名字

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

mysql.createConnection的返回值connection是我們接下來(lái)操作mysql的一個(gè)具體的對(duì)象,所有的操作方法都是基于他的。

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

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

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

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

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

第二個(gè)問(wèn)題是我們?cè)趕erver.js中引入了db.js

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

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

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

相關(guān)文章

  • Node的stream數(shù)據(jù)流你了解嗎

    Node的stream數(shù)據(jù)流你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Node的stream數(shù)據(jù)流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • 在node中使用jwt簽發(fā)與驗(yàn)證token的方法

    在node中使用jwt簽發(fā)與驗(yàn)證token的方法

    這篇文章主要介紹了在node中使用jwt簽發(fā)與驗(yàn)證token的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • Node批量爬取頭條視頻并保存方法

    Node批量爬取頭條視頻并保存方法

    在本篇文章中我們給大家介紹了node爬取頭條里面的視頻,并進(jìn)行批量保存的方法,有需要的朋友可以測(cè)試以下。
    2018-09-09
  • Node爬蟲(chóng)工具Puppeteer入門(mén)教程實(shí)踐

    Node爬蟲(chóng)工具Puppeteer入門(mén)教程實(shí)踐

    Puppeteer是一個(gè)Node庫(kù),本文主要介紹了Node爬蟲(chóng)工具Puppeteer入門(mén)教程實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • NodeJS 將文件夾按照存放路徑變成一個(gè)對(duì)應(yīng)的JSON的方法

    NodeJS 將文件夾按照存放路徑變成一個(gè)對(duì)應(yīng)的JSON的方法

    這篇文章主要介紹了NodeJS 將文件夾按照存放路徑變成一個(gè)對(duì)應(yīng)的JSON的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • NodeJS整合銀聯(lián)網(wǎng)關(guān)支付(DEMO)

    NodeJS整合銀聯(lián)網(wǎng)關(guān)支付(DEMO)

    這篇文章主要介紹了NodeJS整合銀聯(lián)網(wǎng)關(guān)支付DEMO的相關(guān)資料非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • 詳解express使用vue-router的history踩坑

    詳解express使用vue-router的history踩坑

    這篇文章主要介紹了express 使用 vue-router 的 history 踩坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • node+vue實(shí)現(xiàn)用戶注冊(cè)和頭像上傳的實(shí)例代碼

    node+vue實(shí)現(xiàn)用戶注冊(cè)和頭像上傳的實(shí)例代碼

    本篇文章主要介紹了node+vue實(shí)現(xiàn)用戶注冊(cè)和頭像上傳的實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • node連接mysql查詢事務(wù)處理的實(shí)現(xiàn)

    node連接mysql查詢事務(wù)處理的實(shí)現(xiàn)

    本文主要介紹了node連接mysql查詢事務(wù)處理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 使用nvm安裝|更新|切換|nodejs的命令詳解

    使用nvm安裝|更新|切換|nodejs的命令詳解

    這篇文章主要介紹了使用nvm安裝|更新|切換|nodejs的命令詳解,有了nvm就可以簡(jiǎn)單操作node版本的切換、安裝、查看等,需要的朋友可以參考下
    2022-07-07

最新評(píng)論