張釗源 劉曉瑜 鞠玉霞
【摘? 要】通過(guò)對(duì)Node.js建立后端服務(wù)器的介紹,引出其建站優(yōu)勢(shì)與Web前端的契合特點(diǎn)。
【Abstract】Through the introduction of Node.js back-end server, this paper draws out its advantages in station construction and the characteristics of Web front-end.
【關(guān)鍵詞】JavaScript;Node.js;Express框架
【Keywords】JavaScript; Node.js; Express framework
【中圖分類號(hào)】TP311.5;TP393.0? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【文獻(xiàn)標(biāo)志碼】A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 【文章編號(hào)】1673-1069(2020)08-0193-02
1 引言
全棧開(kāi)發(fā)離不開(kāi)服務(wù)器的搭建,近年來(lái)Node.js以其高密度開(kāi)發(fā)的優(yōu)點(diǎn)在服務(wù)器開(kāi)發(fā)中嶄露頭角?;镜木W(wǎng)站開(kāi)發(fā)能力包含服務(wù)端、前端、運(yùn)維部署等。本文引進(jìn)一簡(jiǎn)單實(shí)例來(lái)闡述利用Node.js開(kāi)發(fā)Web服務(wù)器的基本思路。
2 Node.js功能概述
首先,Node中的js有讀寫(xiě)文件的操作能力,彌補(bǔ)了瀏覽器不能直接操作本地文件的缺點(diǎn)。通過(guò)引入fs核心模塊,如使用require方法加來(lái)載fs核心模塊,此外Node還提供了核心模塊http,來(lái)創(chuàng)建服務(wù)器。Node.js可用于構(gòu)建不同類型的應(yīng)用程序,如命令行應(yīng)用程序、Web應(yīng)用程序、實(shí)時(shí)聊天應(yīng)用程序、REST API服務(wù)器等。但是,它主要用于構(gòu)建網(wǎng)絡(luò)程序,如Web服務(wù)器。值得注意的是,response可以用來(lái)給客戶端發(fā)送相應(yīng)數(shù)據(jù),可以使用多次但最后一次需要使用end來(lái)結(jié)束響應(yīng)。
3 信息遞送提交
3.1 初步實(shí)現(xiàn)Apache
啟動(dòng)節(jié)點(diǎn)外殼,打開(kāi)命令提示符或終端,然后鍵入節(jié)點(diǎn)。然后創(chuàng)建請(qǐng)求:Server,監(jiān)聽(tīng)Server的請(qǐng)求并設(shè)置請(qǐng)求處理函數(shù)(請(qǐng)求、處理、響應(yīng)、一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)響應(yīng),若響應(yīng)結(jié)束則不可以重復(fù)發(fā)送),之后實(shí)現(xiàn)目錄列表,渲染來(lái)減輕前端壓力(替換字符串如data=replace('---','替換名稱')減輕了前段的壓力),讀取目的路徑的相關(guān)文件并在客戶端顯示,可以在HTML5里面替換相關(guān)名稱。最后制作留言表回饋,哪些資源可以被用戶訪問(wèn),哪些不能,可以自由控制,為了統(tǒng)一管理靜態(tài)資源,將相關(guān)的資源全部放進(jìn)某一文件夾里面。
在瀏覽器中,全局范圍是窗口。在Node中,全局對(duì)象代表全局范圍。要在全局范圍內(nèi)添加某些內(nèi)容,需要使用export或module.export將其導(dǎo)出。以相同的方式,使用require導(dǎo)入模塊以從全局范圍訪問(wèn)它。關(guān)于用戶提交的內(nèi)容,注意雖然內(nèi)容變化但是形式不會(huì)變化,所以只需要判斷/pinglun,來(lái)判斷用戶的表單請(qǐng)求來(lái)了沒(méi)有。emit函數(shù)會(huì)引發(fā)指定的事件。 參數(shù)一是事件的名稱,為字符串,然后為參數(shù)??梢允褂昧銈€(gè)或多個(gè)參數(shù)來(lái)發(fā)出事件。可以在函數(shù)中為自定義事件指定任何名稱。
3.2 Express框架
不再需要if判斷來(lái)實(shí)現(xiàn)/路徑,直接在Express.get里面寫(xiě)就行了,send內(nèi)容是中文時(shí),也不用切換格式了,直接寫(xiě)進(jìn)去就行。非常方便,404都不用寫(xiě)。該應(yīng)用程序?qū)ο蟀ㄓ糜诼酚蒆TTP請(qǐng)求,配置中間件,呈現(xiàn)HTML視圖和注冊(cè)模板引擎的方法。監(jiān)聽(tīng)函數(shù)在指定的主機(jī)和端口上創(chuàng)建b服務(wù)器。它與監(jiān)聽(tīng)請(qǐng)求函數(shù)的方法相同。
4 第三方模塊
凡是第三方都需要npm加載,使用的時(shí)候require(‘包名)。我們?cè)谑褂胷equire()函數(shù)導(dǎo)入了Express.js模塊。Express模塊返回一個(gè)函數(shù)。此函數(shù)返回一個(gè)對(duì)象,該對(duì)象可用于配置Express應(yīng)用程序。該應(yīng)用程序?qū)ο蟀ㄓ糜诼酚蒆TTP請(qǐng)求,配置中間件,呈現(xiàn)HTML視圖和注冊(cè)模板引擎的方法。作為一個(gè)默認(rèn)備選,可以應(yīng)用作業(yè)隊(duì)列,作業(yè)隊(duì)列是為了解決一個(gè)特定的問(wèn)題,通常要做的事情比單個(gè)Node.js流程可以立即處理的更多,因此,可以“排隊(duì)”處理要處理的事情,甚至可以將它們分配給其他流程來(lái)處理。
5 回調(diào)函數(shù)
引入npm包,初始化package.json。通過(guò)提示符進(jìn)入向?qū)В渲凶钣杏玫男畔⑹莇epenencies信息,來(lái)保存第三包信息,這就需要在安裝第三方包的時(shí)候都得加上save來(lái)保存依賴項(xiàng)信息。所以有了這個(gè)包,模塊丟失無(wú)妨,可以在package.json這個(gè)文件里找到depenencies的依賴項(xiàng)。異步函數(shù):代碼執(zhí)行過(guò)程中不會(huì)等待定時(shí)器,哪怕定時(shí)零秒,為單線程。當(dāng)執(zhí)行異步api時(shí),不會(huì)等待。所以不能在函數(shù)內(nèi)部直接返回函數(shù)值,返回undefined。
對(duì)于日常使用,模塊使我們可以從較小的部分組成較大的程序。它們共同定義了模塊,成為了更大的軟件的基本構(gòu)建模塊。在幕后,模塊通過(guò)名為模塊的對(duì)象來(lái)跟蹤自身。因此,模塊是指代的對(duì)象。其中GruntJS包括用于各種任務(wù)的插件。例如,只要應(yīng)用程序中的任何Js文件發(fā)生更改,插件都會(huì)自動(dòng)重新啟動(dòng)節(jié)點(diǎn)服務(wù)器。因此,不必在每次修改Js時(shí)都手動(dòng)停止并重新啟動(dòng)節(jié)點(diǎn)服務(wù)器。該插件可用于壓縮CSS文件也可用于格式化,搜索或重寫(xiě)應(yīng)用程序中的Js。Node.js中非?;镜臅?huì)話的身份驗(yàn)證是驗(yàn)證用戶是否確實(shí)被聲明為誰(shuí)的過(guò)程。 授權(quán)是確定用戶是否具有訪問(wèn)他/她請(qǐng)求的資源的特權(quán)的過(guò)程。驗(yàn)證是服務(wù)器給的,所以這樣就很安全,不太容易偽造出來(lái)。這個(gè)時(shí)候我們就可以包一些敏感的數(shù)據(jù)保存到服務(wù)端??蛻舳酥恍枰弥@把鑰匙就可以了。對(duì)于Node中的非模塊成員使用Node打開(kāi)時(shí),在Node的目錄(執(zhí)行Node命令的路徑)下找這個(gè)文件,只需要把相對(duì)路徑替換為絕對(duì)路徑(動(dòng)態(tài)獲取不受執(zhí)行Node命令所屬路徑影響,用Export引出對(duì)象,在a文件中用b的成員時(shí),需要使用Exports將成員接出。默認(rèn)情況下,它包含在應(yīng)用程序的每個(gè)Js文件中。這樣的話我們就可以利用不同的請(qǐng)求方法讓一個(gè)請(qǐng)求路徑使用多次,注意req.query只能拿get函數(shù)請(qǐng)求的參數(shù)。
6 信息管理
引入路由,下面列出了在Node.js中實(shí)現(xiàn)路由的兩種方法。使用框架:Node具有許多框架來(lái)幫助啟動(dòng)和運(yùn)行服務(wù)器。 Express框架具有一個(gè)與服務(wù)響應(yīng)對(duì)應(yīng)的對(duì)象,所以建議在次框架下應(yīng)用路由。當(dāng)處理添加頁(yè)面時(shí),注意這里的重定向是在點(diǎn)擊提交之后直接回到初始并編寫(xiě)保存數(shù)據(jù)的函數(shù)。獲取信息函數(shù)的參數(shù)一值永遠(yuǎn)為空,第二個(gè)值為拿到列表的數(shù)據(jù);根據(jù)id獲取信息對(duì)象(在這里可以定義findById一個(gè)參數(shù)是為了拿到ID)。注意函數(shù)的更新功能:使用時(shí)必須將id統(tǒng)一轉(zhuǎn)換為數(shù)字類型,要修改誰(shuí),就需要把誰(shuí)找出來(lái)。當(dāng)某個(gè)遍歷項(xiàng)符合既定條件時(shí),就將對(duì)象數(shù)據(jù)轉(zhuǎn)換為字符串。
以物流信息管理系統(tǒng)為例,如圖3所示。
7 結(jié)語(yǔ)
JavaScript基本上被用作Web前端開(kāi)發(fā)工具,并被證明是構(gòu)建跨開(kāi)發(fā)平臺(tái)的重要工具。而Node.js在Web開(kāi)發(fā)的這一重大轉(zhuǎn)變中起了重要作用。它使開(kāi)發(fā)人員可以用Js編寫(xiě)服務(wù)器端應(yīng)用程序。人們可用Js編寫(xiě)前端和后端Web應(yīng)用程序,而且不需要使用任何其他服務(wù)器端編程語(yǔ)言。這些優(yōu)勢(shì)使建立服務(wù)器變得比較容易。
【參考文獻(xiàn)】
【1】吳春玲,劉廣偉,程淑偉.基于Node.js的河道排污監(jiān)測(cè)管理平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2018(10):121-122.
【2】朱曉陽(yáng),劉苑如,范仲言.基于Node.js的學(xué)習(xí)平臺(tái)后端系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2019(13):116-118.
【3】王伶俐,張傳國(guó).基于NodeJS+Express框架的輕應(yīng)用定制平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),2017,44(S2):606-609.