国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

node(koa2) web應(yīng)用模塊介紹詳解

2019-11-19 11:55:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在自己的koa2 web項(xiàng)目中,用到了幾個(gè)模塊,感覺都是不錯(cuò)的,特地來(lái)分享下這些模塊。

一、前言

我們都知道可以通過(guò)koa2 工程名的方式來(lái)初始化koa2項(xiàng)目,官方為我們?cè)黾恿薻oa-bodyparser、koa-josn、koa-router等非常不錯(cuò)的模塊,但是,仍不夠,所以我將搜集到的有用的包介紹下,當(dāng)然,有好的包仍然會(huì)添加到其中。整個(gè)項(xiàng)目在koa2-web-engine ,為了方便查看,使用了原生的方式,歡迎查看。

二、新的模塊

將代碼克隆到本地并安裝依賴后,啟動(dòng)服務(wù)器,在3000端口可以看到所有demo。

驗(yàn)證碼

svg-captcha是一個(gè)驗(yàn)證碼的庫(kù),他創(chuàng)建了svg格式的驗(yàn)證碼,可以在登錄時(shí),驗(yàn)證是否是正常的用戶登錄。

使用十分的簡(jiǎn)單:

const svgCaptcha = require('svg-captcha');captcha = svgCaptcha.create();

captcha對(duì)象中包含了svg數(shù)據(jù)和svg上顯示的內(nèi)容,至于是否要大小寫強(qiáng)制驗(yàn)證就可以通過(guò)配置的方式來(lái)增加了。

處理代碼位于routes/verificationCode.js中。

密碼加密登錄

后端主要是利用node-rsa生成公鑰和私鑰,再將公鑰發(fā)送給前端,前端利用jsencrypt進(jìn)行加密后發(fā)送給node,node再用私鑰解密。

為了性能,我只在服務(wù)器啟動(dòng)的時(shí)候生成公鑰和私鑰,以后的請(qǐng)求都是用這隊(duì)公私鑰,他位于utils/RSA.js文件中,解密在routes/login.js中。

更詳細(xì)的可以查看我的這篇博客:基于node簡(jiǎn)單實(shí)現(xiàn)RSA加解密

參數(shù)類型檢測(cè)

為了服務(wù)器的安全性,服務(wù)器對(duì)前端發(fā)送來(lái)的數(shù)據(jù)肯定是要做校驗(yàn)的,我這使用的joi庫(kù)。

校驗(yàn)主要靠Joi.validate()方法,第一個(gè)參數(shù)是要校驗(yàn)的對(duì)象數(shù)據(jù),第二個(gè)參數(shù)是數(shù)據(jù)內(nèi)每個(gè)鍵對(duì)應(yīng)的數(shù)據(jù)類型,第三個(gè)則是可選的option,返回值是一個(gè)對(duì)象,該對(duì)象下的error字段用于判斷此次校驗(yàn)是否成功。

在utils/checkParams.js中,paramsFormat定義了檢測(cè)類型,當(dāng)然每個(gè)類型都得用joi內(nèi)置的類型,checkParams()函數(shù)就是做檢測(cè)的地方,將最后的檢測(cè)結(jié)果return出去。

回到routes/joi.js中,利用checkParams()方法檢測(cè)數(shù)據(jù)類型,這兒的檢測(cè)是針對(duì)單個(gè)的請(qǐng)求,如果要針對(duì)所有的請(qǐng)求,可以寫成中間件的形式,如utils/middleware.js中,并在app.js中加入以下的就行了:

const middleware = require('./utils/middleware');middleware.use(app);

防xss

這兒用到的是xss模塊,將每次請(qǐng)求到的數(shù)據(jù)經(jīng)過(guò)xss處理,輸出到后端。為此我自己搞了koa2-xss中間件模塊,順帶學(xué)習(xí)了如何發(fā)布npm包,感興趣的可以看下。

日志記錄

我是用的是log4js模塊,該模塊既可以記錄到數(shù)據(jù)庫(kù),也可以記錄到log文件中,此處我是寫到文件中的。

utils/logs.js文件中是log4js的配置,并封裝了對(duì)外的調(diào)用接口,routes/log4js.js中是根據(jù)用戶發(fā)送的請(qǐng)求記錄到日志文件中。

定時(shí)任務(wù)

利用了node-schedule模塊,一個(gè)系統(tǒng)總會(huì)用到定時(shí)任務(wù)的,node-schedule提供了較為簡(jiǎn)單的api,使用比較方便。

路由合并

koa2初始化的項(xiàng)目中是將每個(gè)路由文件require到app.js中的,當(dāng)路由文件變多時(shí),管理這些路由就是件麻煩的事,于是引入了koa-compose來(lái)管理這些路由文件,只對(duì)外暴露一個(gè)接口。詳細(xì)的可以查看routes/index.js文件。

webSocket

websocket在實(shí)時(shí)性要求比較高的場(chǎng)景下也是會(huì)用到的,我們可以利用ws模塊實(shí)現(xiàn)。更為詳細(xì)的可以查看我的這篇文章:基于node實(shí)現(xiàn)websocket通信。

三、總結(jié)

后期用到一些有意思,有用的模塊也將加入到koa2-web-engine 中。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 岳普湖县| 仁化县| 枞阳县| 安阳市| 玛沁县| 峡江县| 东海县| 定西市| 柳江县| 宁海县| 泽普县| 沽源县| 鄄城县| 玉溪市| 临城县| 舟山市| 阿克| 左云县| 南靖县| 衡东县| 章丘市| 上栗县| 乌兰县| 丰都县| 宜州市| 厦门市| 邯郸县| 会理县| 鄂伦春自治旗| 平远县| 姜堰市| 建宁县| 都安| 博湖县| 靖宇县| 新巴尔虎左旗| 宝清县| 和平区| 什邡市| 昂仁县| 筠连县|