仇 晶,黃 巖,柴瑜晗
(河北科技大學(xué)信息科學(xué)與工程學(xué)院,河北石家莊 050018)
基于Node.js中間層Web開發(fā)的研究與實現(xiàn)
——以微信圖書借閱平臺為例
仇 晶,黃 巖,柴瑜晗
(河北科技大學(xué)信息科學(xué)與工程學(xué)院,河北石家莊 050018)
針對Web研發(fā)領(lǐng)域一直面臨前后端耦合問題,在充分分析傳統(tǒng)的互聯(lián)網(wǎng)前后端Web軟件開發(fā)的基礎(chǔ)上,提出了引入 Node.js 作為中間層來解除前、后端之間耦合關(guān)系的新解決方案。設(shè)計了新的架構(gòu)模式指導(dǎo)Web軟件開發(fā),從而達到提高開發(fā)效率、提升代碼靈活性、明確開發(fā)人員工作職責(zé)等目的?;诖搜芯?,真實開發(fā)了一個基于微信的圖書借閱平臺,并以此作為可行性檢驗的依據(jù),該圖書借閱平臺使用微信作為前端執(zhí)行環(huán)境,提供圖書借閱、圖書歸還、圖書入庫、圖書瀏覽功能。系統(tǒng)采用 B/S 架構(gòu),Node.js 中間層和后端程序在服務(wù)器中運行,用戶關(guān)注微信公眾號后,可以通過微信聊天窗口接收服務(wù)器端訊息,也可以通過公眾號菜單導(dǎo)航到前端界面,完成圖書借閱分享操作,交互方式高效簡潔。
計算機網(wǎng)絡(luò);Web開發(fā)方法;耦合與解耦;Node.js;中間層;移動終端
步入信息時代以來,互聯(lián)網(wǎng)給人們的生活帶來了翻天覆地的變化,互聯(lián)網(wǎng)也不再簡單地僅僅通過提供便利快捷的資訊服務(wù)來豐富人們的生活。互聯(lián)網(wǎng)的出現(xiàn)打破了許多傳統(tǒng)行業(yè)壟斷的格局,互聯(lián)網(wǎng)以其接入面廣、信息及時、人人可參與等性質(zhì),迅速融入到了人們的生活中,并且已經(jīng)成為整個社會不可缺少的一部分[1]。大約5年以前的互聯(lián)網(wǎng)是屬于PC時代,那時人們的網(wǎng)絡(luò)生活包括逛貼吧、看資訊、寫博客、下載多媒體文件以及在線網(wǎng)購等。隨著互聯(lián)網(wǎng)的發(fā)展、移動4G和公共Wifi網(wǎng)絡(luò)的速度提升和移動設(shè)備的普及,目前移動端市場正在以突飛猛進的速度滲透到用戶群當(dāng)中。越來越多的人開始使用移動端設(shè)備接入互聯(lián)網(wǎng)豐富日常生活[2]。在線購物、訂餐,訂房、訂票,到日常信息的獲取和交流,都可以利用移動設(shè)備完成。
然而,移動端服務(wù)和業(yè)務(wù)規(guī)模的擴增對開發(fā)者而言卻是一件讓人頭疼的難事,因為傳統(tǒng)互聯(lián)網(wǎng)一直沒能很好地解決前后端耦合的問題[3]。前端由于接入設(shè)備種類的增加以及業(yè)務(wù)規(guī)模的愈發(fā)復(fù)雜化,導(dǎo)致人們強烈需要把前端從后端中解耦出來,讓前后端不僅從運行平臺上解開,更重要的是從代碼設(shè)計和架構(gòu)上實現(xiàn)完全的解耦。
在這些基礎(chǔ)上,前人為了實現(xiàn)前后端解耦總結(jié)了許多實踐方法,但每解決一個問題往往會引入新的問題[4]。本文試圖引入一種新的模式,從根本上實現(xiàn)前后端的徹底解耦,并通過微信公眾號開發(fā)實現(xiàn)一個圖書借閱平臺的真實例子,驗證了所提出新模式的可行性與架構(gòu)方法。
Web軟件研發(fā)這一行業(yè),從互聯(lián)網(wǎng)誕生的那一刻開始誕生,開發(fā)模式也在不斷演進。從最初既做設(shè)計圖又要寫代碼,不分前后端一人通吃的蠻荒時代,到現(xiàn)在逐漸分工明確各司其職的現(xiàn)代化開發(fā)時代,Web行業(yè)正在以歷史上最快的速度向前發(fā)展。在這個歷史進程中,Web研發(fā)模式經(jīng)歷了如下階段。
最初期可稱為Web初期,那時不區(qū)分前后端工程師,對于大部分公司而言,懂得技術(shù)的人才并不多,然而當(dāng)初的業(yè)務(wù)程度也沒有現(xiàn)在這么復(fù)雜。通常所有工作由一個小團隊即可完成,HTML內(nèi)容直接由JSP或者PHP等后端語言直接輸出,交給瀏覽器來呈現(xiàn),所有關(guān)于頁面的展示邏輯都由瀏覽器來負責(zé)[5]。瀏覽器端也很少參與業(yè)務(wù)邏輯,內(nèi)容完全由服務(wù)器端程序來決定。這種模式的方便之處就是業(yè)務(wù)邏輯十分簡單,業(yè)務(wù)核心依賴服務(wù)器端,代碼結(jié)構(gòu)簡單清晰,利于調(diào)試和編寫[6]。然而,一旦隨著業(yè)務(wù)規(guī)模的增長,過多摻雜了View層邏輯的服務(wù)器端代碼就會不斷增長,不但影響性能、效率,還嚴重制約程序開發(fā)的進度。服務(wù)器端的復(fù)雜度越來越大,為了解決問題,單純靠填補服務(wù)器端開發(fā)人員的數(shù)量也難以應(yīng)對龐大的服務(wù)器端代碼。
這期間遇到的一些典型問題令許多人深有感觸,隨著服務(wù)逐漸增長,API調(diào)用關(guān)系變復(fù)雜,服務(wù)器端程序部署成為問題。后端人員對代碼做出修改后上線需要進行上線部署,而前端人員對頁面的細微調(diào)整也需要與后端人員進行溝通,提交代碼給后端進行處理,完成本地開發(fā),代碼合并,后端部署等諸多環(huán)節(jié)[7]。這導(dǎo)致前端的任務(wù)嚴重依賴于后端,沒有后端的前端程序完全無法獨立運行,制約著前后端之間開發(fā)進度的銜接。
為了解決這種混亂不堪的開發(fā)狀況,誕生了一種耦合式的前后端解決方案,即前端人員書寫完頁面代碼之后,交給后端人員處理與數(shù)據(jù)庫的對接,讓前端人員給后端人員打下手,并且嚴格按照這種開發(fā)流程來執(zhí)行。雖然這種方式解開了前后端人員之間的工作任務(wù),但是并沒有解開前后端之間耦合的代碼[8]。
到了Web 2.0時期,瀏覽器所呈現(xiàn)的內(nèi)容愈發(fā)豐富,各種Web應(yīng)用層出不窮,開始強調(diào)客戶端豐富的用戶交互,此時再把前后端耦合在一起顯然不合適。所以為了降低復(fù)雜度,開始在Web后端領(lǐng)域?qū)嵺`MVC開發(fā)模式。這一階段涌現(xiàn)出了一些非常優(yōu)秀的后端框架,比如RubyonRails,JavaSpring,Django等[9]。后端MVC強調(diào)模型、視圖和控制器職責(zé)的分離,而一直以來前端的工作都是與View層緊密相連的,所以后端可以完全專注于Model和Controller的開發(fā)工作,而前端則專注于View層頁面的開發(fā)。當(dāng)前端編寫完頁面模板之后,交給后端去渲染Model層的數(shù)據(jù)。雖然前后端各自的關(guān)注點分離了,但是依然沒有解決代碼耦合的問題。對于后端而言,Controller層和Model層糾纏不清,Model層又和View層糾纏不清。雖然后端MVC是一種非常優(yōu)秀的開發(fā)模式,但是前后端耦合這些根源問題依然沒有解決。
隨著Google推動Ajax技術(shù)的發(fā)展,現(xiàn)在幾乎所有網(wǎng)站都有Ajax的身影,異步的JavaScript和XML技術(shù)給Web開發(fā)模式提供了全新的思路。服務(wù)器端單純以服務(wù)的模式提供數(shù)據(jù),View層完全獨立于后端的服務(wù),前端所需的數(shù)據(jù)都通過Ajax異步請求向服務(wù)器端獲取,頁面內(nèi)容的渲染工作全部由前端完成。這種模式下,前端與后端實現(xiàn)了完全的分離,交互的關(guān)鍵點就是Ajax接口,但是此時,服務(wù)器端的業(yè)務(wù)雖然降低了,但是前端的復(fù)雜度卻增加了。一切總歸是平衡的,后端所減輕的負擔(dān),現(xiàn)在全部施加到了前端上。這個階段,是前端工作人員最痛苦的時期,JavaScript走向了之前JSP和PHP走過的路,前端代碼陡增,前端嘗試引入框架來解決代碼邏輯問題,但前端的壓力依然很大[10]。
到了最近一個階段,也是目前業(yè)界正在廣泛使用的一個模式,即在前端也部署MVC甚至MVVM這種大型軟件的構(gòu)建模式。這一階段前后端之間的代碼耦合已經(jīng)降低到最低,幾乎解除了Web開發(fā)之間的代碼耦合問題[11]。后端專注于業(yè)務(wù)邏輯的開發(fā),通過RESTful接口輸出數(shù)據(jù),前端只要遵從設(shè)計模式的標準,也可以應(yīng)對復(fù)雜的交互邏輯。但是方便的背后,也帶來了一些其他問題。比如全部異步的請求模式給前端編碼帶來難度,全部通過請求接口來渲染數(shù)據(jù)對搜索引擎也十分不友好,不方便爬取頁面數(shù)據(jù)。而且對于移動設(shè)備而言,尤其是手機,在網(wǎng)絡(luò)狀況不好的情況下,前端頁面需要等待網(wǎng)絡(luò)請求返回到結(jié)果才能呈現(xiàn)。對于前端SPA應(yīng)用,最重要的路由問題難以和后端調(diào)諧,長此以往路由都是交給后端處理的,但是現(xiàn)實的情況是前端對路由的依賴更加嚴重。
展望未來,業(yè)界正在積極尋找一種新的解決方案,一個新的模式。既能解除Web開發(fā)面臨的耦合問題,又能讓前后端關(guān)注自己的職責(zé),并且彼此的功能劃分也更加細致。讓前端可以脫離于后端,讓后端可以專注于業(yè)務(wù)服務(wù)。隨著Node.js技術(shù)的發(fā)展,再一次為Web研發(fā)模式帶來了新的思路[12]。Node.js與前端共享開發(fā)語言,可以與前端實現(xiàn)高度的代碼重用,也賦予了JavaScript在服務(wù)器端執(zhí)行的能力。這種新的模式就是在傳統(tǒng)后端和前端之間,引入一個Node.js中間層來調(diào)和矛盾和彼此的缺失。以往所面臨的問題,隨著Node.js的引入都可以得到解決,所帶來的代價便是需要前端工程師對后端有更深入的理解,需要他們設(shè)計更多后端的知識,同時引入一個新層之后的通信效率略微下降。更多的制約可能是面臨新的技術(shù)解決方案時的擔(dān)憂,缺乏對新技術(shù)的實踐經(jīng)驗,無法短期內(nèi)改善大量的歷史代碼[13]。
在傳統(tǒng)前后端之間引入一個Node.js中間層來調(diào)和前后端耦合問題,是本文提出的Web開發(fā)解耦問題的新方案。同時通過開發(fā)一個基于微信的圖書借閱平臺,來展示和驗證該方案的可行性[14]。
所嘗試探索的途徑是在Web服務(wù)器上同時部署服務(wù)器程序和Node.js中間層,當(dāng)用戶請求前端頁面時,前端首先訪問Node.js中間層進行頁面關(guān)鍵數(shù)據(jù)的渲染,當(dāng)后續(xù)需要數(shù)據(jù)時即可跳過Node.js中間層直接請求后端。當(dāng)用戶進行頁面跳轉(zhuǎn)時,使用Node.js中間層和前端同步頁面路由,對于用戶的狀態(tài)管理等與業(yè)務(wù)邏輯不是強相關(guān)的服務(wù)也由Node.js來提供。依然會依賴Ajax技術(shù)來處理大量的數(shù)據(jù),除了引入Node.js之外,其他的前后端技術(shù)依然保持不變,變的是它們之間的組合關(guān)系。
微信圖書借閱平臺提供添加圖書、借閱圖書、歸還圖書、瀏覽圖書等功能。用戶首次向書架貢獻自己的圖書時,使用添加圖書功能;當(dāng)用戶需要查看當(dāng)前書架圖書信息時,使用瀏覽圖書功能;當(dāng)用戶需要從書架上借閱圖書時,使用圖書借閱功能;當(dāng)用戶閱讀完圖書時,使用歸還圖書功能。
微信圖書借閱平臺的使用流程有3個步驟。第1步:用戶關(guān)注微信圖書借閱平臺公眾號;第2步:用戶使用微信圖書借閱平臺的各個功能,包括添加圖書、瀏覽圖書、借閱圖書、歸還圖書;第3步:掃描圖書條形碼,完成圖書信息讀取,并確認圖書的添加、借閱、歸還等功能。
目前微信平臺使用的廣泛度已家喻戶曉,作為即時通訊軟件,它還提供了開發(fā)平臺供開發(fā)者使用。因此,微信圖書借閱平臺基于微信,不需要下載任何軟件,只要用戶關(guān)注“微信圖書借閱平臺”公眾號,就可以使用平臺的圖書相關(guān)功能。微信圖書借閱平臺公眾號的主界面是由3個一級菜單組成,包括借閱圖書、歸還圖書、管理圖書。其中管理圖書菜單下還有2個二級菜單,包括添加圖書、瀏覽圖書。用戶第1次使用本平臺可能是要貢獻圖書的貢獻者用戶或者是借閱圖書的借閱者用戶,對于貢獻者,點擊管理圖書菜單下的添加圖書,并將圖書放入書架;對于需要借閱書籍的用戶,點擊借閱圖書菜單。用戶需要借閱書籍時,可以點擊瀏覽圖書,查看當(dāng)前書架上有哪些圖書,點擊具體的某本圖書,查看圖書相關(guān)信息。微信圖書借閱平臺并沒有圖書館手持款圖書條形碼掃描儀,但是,平臺使用微信的“掃一掃”功能,完成對圖書條形碼的掃描,從而獲取實體圖書的圖書信息。添加圖書、借閱圖書、歸還圖書的功能都需要獲取圖書信息,通過點擊功能菜單會自動轉(zhuǎn)到掃一掃界面。微信圖書借閱平臺的操作流程是關(guān)注“微信圖書借閱平臺”公眾號、選擇功能菜單、進入掃碼、完成操作確認。系統(tǒng)總體框圖如圖1所示。
圖1 系統(tǒng)總體框圖Fig.1 Overall block diagram of the system
3.1 概要設(shè)計
3.1.1 整體設(shè)計
1) 微信公眾號自定義菜單
微信公眾號是用戶使用該圖書分享平臺的入口,公眾號底部的自定義菜單是引導(dǎo)用戶進行功能操作的入口,需要設(shè)置簡潔直觀的入口讓用戶快速了解菜單對應(yīng)的功能。
2) 前端交互
圖書分享和借閱應(yīng)該是一個非常便捷的操作,不應(yīng)當(dāng)涉及過多的交互步驟,使得各個功能一觸即達。
3) Node.js中間層
中間層的職責(zé)是前端與后端的橋梁,負責(zé)從后端獲取數(shù)據(jù)并渲染出頁面或進一步處理數(shù)據(jù)后傳遞給前端。
系統(tǒng)架構(gòu)圖如圖2所示。
圖2 系統(tǒng)架構(gòu)圖Fig.2 System architecture diagram
3.1.2 模塊設(shè)計
1)圖書借閱模塊
圖書借閱模塊實現(xiàn)了圖書的借閱操作,讀者從書架上拿到圖書,通過掃描圖書背面的條形碼確認借閱完成借書操作,取走圖書。
2)圖書歸還模塊
圖書歸還模塊實現(xiàn)了圖書的歸還操作,當(dāng)讀者閱讀完畢后,掃描圖書條形碼后確認圖書歸還,然后將圖書歸回原位。
3)圖書添加模塊
圖書添加模塊實現(xiàn)了圖書的入庫操作,讀者拿出自己的圖書,掃描圖書條形碼后確認圖書歸還,然后將圖書放入書架。
4)圖書瀏覽模塊
圖書瀏覽模塊實現(xiàn)了瀏覽圖書信息的功能,用戶可以遠程查看書架上的書籍信息,包括書籍名等基本信息、書籍?dāng)?shù)量、書籍可借閱數(shù)量。
3.2 詳細設(shè)計
用戶進入微信后,關(guān)注公眾號進入公眾號界面,通過公眾號主頁底部的自定義菜單進入相關(guān)操作界面。點擊“借閱圖書”自動彈出二維碼讓用戶掃描書籍自動借閱;點擊“歸還圖書”自動彈出二維碼讓用戶掃面書籍自動歸還;點擊“添加圖書”自動彈出二維碼讓用戶掃描書籍完成添加;點擊“瀏覽圖書”跳轉(zhuǎn)到設(shè)定的網(wǎng)頁瀏覽當(dāng)前書庫的所有書目。
3.2.1 微信公眾號設(shè)置
申請個人公眾訂閱號和商業(yè)公眾企業(yè)號的用戶,首先需要到微信官網(wǎng)注冊賬號,個人公眾訂閱號用戶需要提供證件申請實名認證,商業(yè)公眾企業(yè)號用戶需要提供商業(yè)資質(zhì)證明。等待申請結(jié)果成功后,用戶們便可以通過微信搜索功能搜索公眾號名字,查看詳情后關(guān)注該微信公眾號。
在微信后臺配置微信與自己的服務(wù)器之間的連接,從而打通從用戶到微信服務(wù)器再到個人服務(wù)器之間的消息傳遞,并將處理后的結(jié)果回傳給微信服務(wù)器,最終轉(zhuǎn)發(fā)到用戶的微信客戶端上。
微信圖書借閱平臺通過企業(yè)公眾號底部的自定義菜單欄,分別引導(dǎo)用戶至不同的功能,與用戶完成交互。菜單欄分為一級菜單和二級菜單,本平臺使用借閱圖書、歸還圖書、管理圖書3個一級菜單,管理圖書下有添加圖書、瀏覽圖書2個二級菜單。
3.2.2 獲取圖書信息
實現(xiàn)一個圖書數(shù)據(jù)庫的工作量非常龐大,涉及到市面上所有已有圖書的信息采集入庫操作。為了便利地獲取圖書信息,采用豆瓣開放的公共圖書API接口實現(xiàn)圖書信息查詢功能。用戶首先打開微信進入公眾號界面,通過公眾號底部菜單中的“添加圖書”菜單,點擊后自動轉(zhuǎn)至圖書條形碼掃描界面,用戶掃描圖書背面的條形碼后,微信將識別出條形碼中包含的ISBN號并回傳給前端程序。前端程序?qū)SBN回傳給Node.js中間層服務(wù)器,Node.js向豆瓣開放API服務(wù)器發(fā)送RESTful請求,附帶著圖書的ISBN信息,取得圖書信息(圖書名、圖書封面圖片鏈接、圖書內(nèi)容摘要、作者、出版社等)。
3.2.3 存儲圖書信息
所有圖書的信息都通過自豆瓣的開放API接口服務(wù)獲得,每當(dāng)采集到一本圖書的信息,便會執(zhí)行一次圖書信息的存儲任務(wù),將圖書信息存入服務(wù)器本地數(shù)據(jù)庫中。這樣做的原因是,一方面便于再次獲取圖書信息時,可以快速查詢圖書結(jié)果,另一方面將初次獲取后的信息按照關(guān)系存入本地數(shù)據(jù)庫,有利于信息的統(tǒng)計和變更。
在取得圖書信息后,用戶點擊確認按鈕,圖書的書名、ISBN號、作者、出版社、封面、摘要等信息會存儲到數(shù)據(jù)庫中,并附加與借閱相關(guān)的圖書信息,比如圖書庫存量、借閱次數(shù)、當(dāng)前借閱者的信息等等。
3.2.4 展示圖書信息
Node.js中間層在取得圖書信息后,根據(jù)預(yù)先定義的Jade模板渲染出圖書界面的HTML內(nèi)容。微信用戶內(nèi)置的WebView控件在收到HTML內(nèi)容后,渲染內(nèi)容,加載圖書封面等靜態(tài)資源,經(jīng)過CSS樣式表處理后渲染出圖書展示界面。圖書信息的展示工作完全由Node.js中間層負責(zé),當(dāng)用戶在圖書頁面之間跳轉(zhuǎn)時,均直接請求Node.js中間層服務(wù)器,交由Node.js選擇指定的Jade模板渲染內(nèi)容[15]。
3.3 概念設(shè)計
微信圖書借閱系統(tǒng)的正常使用需要有正確的數(shù)據(jù)庫讀取操作,數(shù)據(jù)庫設(shè)計的優(yōu)劣與否關(guān)系到系統(tǒng)能否運行流暢[16-17]。微信圖書借閱系統(tǒng)的數(shù)據(jù)庫設(shè)計主要分為概念結(jié)構(gòu)設(shè)計和物理結(jié)構(gòu)設(shè)計,概念結(jié)構(gòu)設(shè)計主要分析實體關(guān)系,以E-R圖形象地展示實體關(guān)系。物理結(jié)構(gòu)設(shè)計將實體關(guān)系轉(zhuǎn)化成數(shù)據(jù)庫中表的關(guān)系,以及表結(jié)構(gòu)中各個字段的設(shè)置。
微信圖書借閱系統(tǒng)的實體是各個用戶,用戶之間的地位平等,每個用戶都可以貢獻圖書、借閱圖書、查看圖書借閱情況。本系統(tǒng)的數(shù)據(jù)庫E-R圖如圖3所示。
圖3 系統(tǒng)E-R圖Fig.3 System E-R diagram
本系統(tǒng)使用的數(shù)據(jù)庫是MySQL數(shù)據(jù)庫,設(shè)計時充分考慮了程序處理的要求、應(yīng)用環(huán)境的需求,斟酌數(shù)據(jù)庫表結(jié)構(gòu)和字段設(shè)置,考慮數(shù)據(jù)庫各表中的字段類型和長度,盡可能提前預(yù)估到可能出現(xiàn)的問題,避免程序設(shè)計過程中帶來不必要的麻煩[18]。MySQL數(shù)據(jù)庫中,凡字段為varchar或char類型時,需要指定編碼方式為UTF-8,本系統(tǒng)對以上2種類型數(shù)據(jù)全部設(shè)置為UTF-8編碼方式。
微信圖書借閱系統(tǒng)共設(shè)計了3張表,分別是圖書表(Books)、用戶表(Users)、借閱表(Borrowing)。圖書表存放從豆瓣開放API接口獲取到的圖書信息,用戶表存放微信的用戶賬號信息,借閱表是一張關(guān)聯(lián)表,關(guān)聯(lián)了用戶借閱圖書的信息。所有功能均采用這3張表實現(xiàn)。
本文設(shè)計的微信圖書借閱平臺是一個完整的B/S架構(gòu)的實現(xiàn),在服務(wù)器端通過Nginx監(jiān)聽用戶請求并分發(fā)請求給StrongLoop進程管理器,StrongLoop創(chuàng)建多個slave進程維護Node.js實例來處理用戶請求,Node.js作為中間層可以構(gòu)建在任何其他語言的后端之上,通過基于RESTful規(guī)則設(shè)計的接口可以建立Node.js中間層與其他后端語言的數(shù)據(jù)通信[19-20]。數(shù)據(jù)庫采用MySQL、通過Jade模板引擎實現(xiàn)服務(wù)端HTML預(yù)渲染、在客戶端通過微信內(nèi)置的Blink內(nèi)核的WebView作為與用戶交互的入口、UI效果展示采用Bootstrap、CSS界面庫快速制作移動端友好的響應(yīng)式界面[21-22]。
該平臺的各功能界面如圖4—圖7所示。
圖4 圖書列表Fig.4 List of books
圖5 掃一掃添加圖書Fig.5 Swipe to add books
圖6 借閱圖書Fig.6 Borrow books
圖7 歸還圖書Fig.7 Return books
本文在分析傳統(tǒng)Web研發(fā)領(lǐng)域互聯(lián)網(wǎng)前、后端Web軟件開發(fā)的基礎(chǔ)上,提出引入Node.js作為中間層以解除前后端之間的耦合關(guān)系新的解決方案,并設(shè)計新的架構(gòu)模式指導(dǎo)Web軟件開發(fā),從而達到提高開發(fā)效率、提升代碼靈活性、明確開發(fā)人員工作職責(zé)等目的,并在此研究基礎(chǔ)上實現(xiàn)一個基于微信的圖書借閱平臺作為可行性檢驗的依據(jù)。該圖書借閱平臺使用微信作為前端執(zhí)行環(huán)境,提供圖書借閱、圖書歸還、圖書入庫、圖書瀏覽功能。系統(tǒng)采用 B/S 架構(gòu),Node.js 中間層和后端程序在服務(wù)器中運行,用戶關(guān)注微信公眾號后,可以通過微信聊天窗口接收服務(wù)器端訊息,也可以通過公眾號菜單導(dǎo)航到前端界面,完成圖書借閱分享操作,交互方式高效簡潔。
/References:
[1] 李張永,陳和平,顧進廣.跨平臺移動Web開發(fā)框架與數(shù)據(jù)交互方法[J].計算機工程與設(shè)計,2014,35(5): 1827-1832. LI Zhangyong, CHEN Heping, GU Jinguang. Cross-platform mobile Web development framework and data interactive method[J]. Computer Engineering and Design, 2014, 35(5): 1827-1832.
[2] 周東星,李心科.基于MVC和AJAX的Web開發(fā)模型的設(shè)計與應(yīng)用[J].合肥工業(yè)大學(xué)學(xué)報(自然科學(xué)版),2008,31(9): 1438-1442. ZHOU Dongxing, LI Xinke. Design and application of a Web development model based on MVC and AJAX[J]. Journal of Hefei University of Technology(Natural Science), 2008, 31(9): 1438-1442.
[3] 王準,夏陽.基于Ruby on Rails的WEB開發(fā)新技術(shù)[J].微計算機信息,2007,23(10-3): 218-220. WANG Zhun, XIA Yang. New technology of Web development: Ruby on Rails[J]. Microcomputer Information, 2007, 23(10-3): 218-220.
[4] 潘曉夢,鄧建華,蘇厚勤.一種跨平臺移動應(yīng)用方案的研究與實踐[J].計算機應(yīng)用與軟件,2013,30(1): 180-182. PAN Xiaomeng, DENG Jianhua, SU Houqin. Study and practice of a cross-platform mobile application solution[J]. Computer Applications and Software, 2013, 30(1): 180-182.
[5] 武佳佳,王建忠.基于HTML5實現(xiàn)智能手機跨平臺應(yīng)用開發(fā)[J].軟件導(dǎo)刊,2013,12(2): 66-68.
[6] CHARLAN A, LEROUX B. Mobile application development: Web vs. native[J]. Communicaitons of the ACM, 2011, 54(5): 49-53.
[7] 鹿旭東,萬建成.Web應(yīng)用開發(fā)方法研究[J].計算機工程與應(yīng)用,2006(13): 97-101. LU Xudong, WAN Jiancheng. Study of development method-logy in Web applications[J]. Computer Engineering and Applications, 2006(13): 97-101.
[8] 孟凡寧,叢中昌,黃志興,等.移動互聯(lián)網(wǎng)應(yīng)用跨平臺開發(fā)研究[J].移動通信,2013(13): 60-63.
[9] 陳樺,杜啟宏,程剛.移動智能終端Web應(yīng)用平臺開發(fā)技術(shù)研究[J].移動通信,2013(5):23-26.
[10]陳必峰.基于AJAX的富客戶端技術(shù)及應(yīng)用[J].計算機科學(xué), 2011, 38(sup1): 419-420. CHEN Bifeng.Technology and application of rich client based on AJAX[J].Computer Science, 2011, 38(sup1): 419-420.
[11]WILLIAMS N S. Java Web高級編程[M].王肖峰,譯.北京:清華大學(xué)出版社,2015.
[12]張煜.一種使用Node.js構(gòu)建的分布式數(shù)據(jù)流日志服務(wù)系統(tǒng)[J].計算機系統(tǒng)應(yīng)用,2013,22(2): 68-71. ZHANG Yu. Distributed data stream log service system built with Node.js[J]. Computer Systems & Applications, 2013, 22(2): 68-71.
[13]SIMONM. Introduction to Ajax: Client Server Communications on the Web[M]. [S.l.]:Oreilly & Associates Inc, 2016.
[14]羅皓,李敏,彭康明.Web開發(fā)中模版引擎方案的實現(xiàn)[J].計算機工程與設(shè)計, 2010,31(7):1606-1608. LUO Hao, LI Min, PENG Kangming.Realization of template engines for Web development process[J].Computer Engineering and Design, 2010,31(7): 1606-1608.
[15]孟晨,趙春亮,張建國.泛型DAO模式在Java Web開發(fā)中的應(yīng)用[J].計算機應(yīng)用與軟件, 2012, 29(1): 175-177. MENG Chen, ZHAO Chunliang, ZHANG Jianguo.Applying generic DAO pattern Java Web development[J].Computer Applications and Software,2012,29(1): 175-177.
[16]李小平,肖岳峰,宿元,等.基于J2EE多層架構(gòu)的Web開發(fā)框架研究[J].計算機應(yīng)用研究, 2008, 25(5): 1429-1431. LI Xiaoping, XIAO Yuefeng, SU Yuan, et al.Study of Web-based framework based on J2EE multi-tier architecture[J].Application Research of Computers, 2008, 25(5): 1429-1431.
[17]張亭. 基于Struts和Hibernate架構(gòu)的渲染集群管理系統(tǒng) Web Portal的開發(fā)[J]. 河北工業(yè)科技,2013,30(4):253-256. ZHANG Ting. Development of Web Portal based on Struts and Hibernate[J]. Hebei Journal of Industrial Science and Technology, 2013,30(4):253-256.
[18]繆亞波,趙軼群.一種針對復(fù)雜交互界面應(yīng)用的Web開發(fā)框架[J].計算機應(yīng)用, 2004,24(2): 154-156. MIAO Yabo, ZHAO Yiqun.A framework of Web development for complex user-interface application[J].Computer Applications, 2004,24(2): 154-156.
[19]任喜偉,陳長明,苗新強.基于Caché的三層結(jié)構(gòu)Web開發(fā)模式的研究[J].計算機測量與控制, 2009, 17(9): 1793-1794. REN Xiwei, CHEN Changming, MIAO Xinqiang.Research three-tier structure of Web development mode based on Caché[J].Computer Measurement & Control, 2009, 17(9): 1793-1794.
[20]樓樹美,李淑玉.動態(tài)WEB開發(fā)下大型交互網(wǎng)站BBS的設(shè)計分析[J].科技通報, 2014, 30(2): 164-166. LOU Shumei, LI Shuyu.Large interactive website BBS design under dynamic WEB development[J].Bulletin of Science and Technology, 2014, 30(2): 164-166.
[21]鄭廣成. ASP.NET中AWSMVC架構(gòu)模式研究[J] . 河北科技大學(xué)學(xué)報,2011,32(6):598-604. ZHENG Guangcheng. Research in AWSMVC framework pattern in ASP.NET[J]. Journal of Hebei University of Science and Technology, 2011,32(6):598-604.
[22]王志剛.PHP5應(yīng)用實例詳解:使用Zend Framework & Smarty構(gòu)筑真正的MVC模式應(yīng)用[M].北京:電子工業(yè)出版社,2010.
Research and realization of Web development based on Node.js middle layer: Taking Wechat book sharing platform as an example
QIU Jing, HUANG Yan, CHAI Yuhan
(School of Information Science and Engineering, Hebei University of Science and Technology, Shijiazhuang, Hebei 050018, China)
Front-end and back-end's code coupling together is a historical problem in Web development area. In this paper, a new solution of Web development is proposed to decoupling connections between front-end and back-end, where Node.js is used as middle layer. A new architecture is also introduced to point the new way of creating web apps, which can enhance efficiency and extend flexibility of development, and make the duty of programmer more clear. To prove the feasibility of our method, a Wechat book sharing platform is developed based on this idea. The platform provides book borrowing, book returning, book checkin and book browsing functionalities and runs on Wechat environment. The platform is based on B/S architecture, and Node.js acts as middle layer on server. Users may receive notifications in Wechat's chatting interface or redirect to front-end webview page by clicking Wechat public accounts' custom menu bar, accomplishing sharing operation of book lending and borrowing, which is convenient and efficient.
computer network; Web development; coupling and decoupling; Node.js; middle layer; mobile terminal
1008-1534(2017)02-0118-07
2016-10-26;
2017-03-01;責(zé)任編輯:陳書欣
國家自然科學(xué)基金(61300120)
仇 晶(1983—),女,河北石家莊人,副教授,博士,主要從事機器學(xué)習(xí)和Web服務(wù)方面的研究。
黃 巖。E-mail:ryerh@qq.com
TP311.5
A
10.7535/hbgykj.2017yx02008
仇 晶,黃 巖,柴瑜晗.基于Node.js中間層Web開發(fā)的研究與實現(xiàn)——以微信圖書借閱平臺為例[J].河北工業(yè)科技,2017,34(2):118-124. QIU Jing,HUANG Yan, CHAI Yuhan.Research and realization of Web development based on Node.js middle layer:Taking Wechat book sharing platform as an example[J].Hebei Journal of Industrial Science and Technology,2017,34(2):118-124.