亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

規(guī)范化安全開發(fā) KOA 手腳架

eechen / 842人閱讀

摘要:規(guī)范化安全開發(fā)手腳架剛接觸的時(shí)候心理也有一點(diǎn)點(diǎn)擔(dān)憂,是一個(gè)輕量級(jí)的框架,這意味著我們想要做好一個(gè)理想的手腳架需要自己去改變很多東西,一些流行的第三方更要做好處理,那么時(shí)間成本會(huì)逐級(jí)的提高。

規(guī)范化安全開發(fā) KOA 手腳架

剛接觸 KOA 的時(shí)候心理也有一點(diǎn)點(diǎn)擔(dān)憂,KOA 是一個(gè)輕量級(jí)的框架,這意味著我們想要做好一個(gè)理想的手腳架需要自己去改變很多東西,一些流行的 npm 第三方更要做好處理,那么時(shí)間成本會(huì)逐級(jí)的提高。

koa-rack

項(xiàng)目目錄
.
├── app.js
├── config
├── controllers
├── doc
├── dox.config.json
├── ecosystem.json
├── index.js
├── jsdoc-conf.json
├── lib
├── log4js
├── Makefile
├── models
├── node_modules
├── npm-shrinkwrap.json
├── oneapm.js
├── package.json
├── proxy
├── README.md
├── routes
├── server
├── sql
├── start.sh
├── static
├── test
├── views
└── webpack.config.js
config

npm i config --save

config 這個(gè)文件夾的作用是用來做開發(fā)環(huán)境、生產(chǎn)環(huán)境和測(cè)試環(huán)境的配制工作,依賴于 config 組件,目錄下以此建立相關(guān)的配置文件:

.
├── default.json
├── development.json
├── production.json
├── readme.md
└── test.json

json 后綴的文件無法做注釋,所以添加 readme.md 文件做配置文件的說明。這個(gè)只是我自己的習(xí)慣,實(shí)際上 config 組件支持多種文件格式,它的機(jī)理就是通過判斷 NODE_ENV 然后分別加載 config 文件夾下的文件。

doc

npm i json-zero -g

文檔文件夾。這里我采用 json-zero 組件進(jìn)行注釋文檔生成。

lib

函數(shù)文件夾。

log4js

npm i log4js --save

擴(kuò)展 log4js 的日志輸出,這里面還是有一點(diǎn)門道的,因?yàn)?KOA 與 EXPRESS 并不相同,所以想要在 KOA上合理的使用 log4js 是要下一點(diǎn)心思去二次封裝一下,以便適應(yīng)自己的項(xiàng)目。

controllers

controllers 文件夾保存控制器

.
└── web
    └── user
        └── index.js

控制器通過 yield 來讀取 User 內(nèi)的數(shù)據(jù)

const User   = require("../../../models/web/index");
module.exports.home = function*() {
    var data = yield User.test({});
};
routes
.
├── index.js
└── web

路由器文件夾,定義 http 的請(qǐng)求指向控制器:

const router = require("koa-router")(),
      debug  = require("debug")("app:routes:index");
/**
 * 引入控制器
 */
var Web = require("./../controllers/web/user/index");
/**
 * 主頁(yè)
 */
router.get("/", Web.home);
module.exports = router;
views
.
├── 400.html
├── 500.html
└── home.html

視圖文件夾。

models

數(shù)據(jù)層文件夾。

.
├── db
│?? ├── mysql_orm.js
│?? └── mysql_pool.js
└── web
    ├── index.js
    └── table
        ├── index.js
        └── photo.js

db 文件夾定義兩種連接 mysql 的方式,web 里面就是具體的業(yè)務(wù)代碼。

以上四個(gè)文件組成了這個(gè)手腳架的基礎(chǔ)業(yè)務(wù)處理邏輯:

這個(gè)架構(gòu)過程是靈活多變的,完全可以根據(jù)自己的需要進(jìn)行取舍和重構(gòu),我只所以將路由和控制器分開成兩個(gè)文件夾,更多的是考慮到當(dāng)一個(gè)項(xiàng)目區(qū)分 n 個(gè)模塊的時(shí)候,彼此之間相互獨(dú)立卻又有一些相同的 api 接口,那么這樣架構(gòu)可以更清晰的區(qū)分和查找接口。

我在15年和16年上半年之間經(jīng)歷過一個(gè)項(xiàng)目,使用 node 做中間層,本來一切順利,但是苦于后端 java 根據(jù)業(yè)務(wù)調(diào)整頻繁更換和更改 api 接口,造成了非常大的重復(fù)工作。漸漸的我就摸索出一套設(shè)計(jì)中間層的經(jīng)驗(yàn),在我們直接引用外部 api 接口之前,不要相信它是一成不變的,不要相信它是永遠(yuǎn)存在的,不要相信它是必要的。在此基礎(chǔ)上根據(jù)功能分成若干模塊,稍微費(fèi)點(diǎn)心力進(jìn)行二次封裝然后再進(jìn)行引用,封裝的時(shí)候盡量考慮他不是唯一接口,并提供便捷和可替換性。

入口文件

入口文件將它拆分為幾個(gè)部分:

.
├── app.js
├── index.js
├── Makefile
├── server
│?? ├── api
│?? ├── auth
│?? ├── index.js
│?? ├── lib
│?? │?? ├── compose.js
│?? │?? ├── cors.js
│?? │?? ├── etag.js
│?? │?? ├── fresh.js
│?? │?? ├── gzip.js
│?? │?? └── ketag.js
│?? └── middleware
│??     ├── helmet_set.js
│??     └── index.js
├── start.sh
└── static

這里我需要吐槽一下 grunt 和 gulp,發(fā)明 grunt 和 gulp 的人一定是天才,但是它倆真的沒有想象中那么好用,我寧愿使用 npm script 或者 makefile。
因?yàn)?KOA 的 generator 相關(guān)的特性,我們必須將很多流行的第三方進(jìn)行改造,我建議不要去找 npm 庫(kù)里的那些已經(jīng)改造好的組件,那些大多版本落后,自力更生比較好一些。

安全相關(guān) helmet

helmet 是一個(gè)很流行的組件,用于處理一些常見的安全問題。

etag

處理靜態(tài)資源響應(yīng)時(shí)間。

一些細(xì)節(jié) Node Security project(nsp)

檢查你使用的模塊是否是易被一些已知的手段攻擊,可以給一個(gè)包的所有依賴關(guān)系上鎖,并且創(chuàng)建一個(gè) npm-shrinkwrap.json 文件。

$ npm install -g nsp nsp-formatter-checkstyle

寫入:

$ npm shrinkwrap

如果想要包含 dependencies and devDependencies 需要添加 --dev:

$ npm shrinkwrap --dev

檢查:

$ nsp check --output summary

$ nsp check --output checkstyle

在根目錄下創(chuàng)建 .nsprc 文件:

retire.js

retire.js是一個(gè)命令行掃描器,幫助你找到你應(yīng)用中依賴庫(kù)存在的漏洞。

requiresafe

https://requiresafe.com/

david

$ npm install david -g

檢查更新,執(zhí)行命令

david

檢查全局模塊

$ david -g

npm outdated

$ npm outdated

$ npm outdated -g --depth 0

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/86443.html

相關(guān)文章

  • 服務(wù)端渲染的React手腳。完美使用 React, Redux, and React-Router

    摘要:服務(wù)端渲染的手腳架這個(gè)啟動(dòng)包的設(shè)計(jì)是為了讓你使用一整套最新最酷的前端技術(shù),所有都是可配置,富特性,基于已經(jīng)提供代碼熱加載,使用預(yù)處理,單元測(cè)試,代碼覆蓋率報(bào)告,代碼分割等等更多。 Universal React Starter Kit 服務(wù)端渲染的React手腳架 這個(gè)啟動(dòng)包的設(shè)計(jì)是為了讓你使用一整套最新最酷的前端技術(shù),所有都是可配置,富特性,基于webpack已經(jīng)提供代碼熱加載,使用...

    zhouzhou 評(píng)論0 收藏0
  • 服務(wù)端渲染的React手腳。完美使用 React, Redux, and React-Router

    摘要:服務(wù)端渲染的手腳架這個(gè)啟動(dòng)包的設(shè)計(jì)是為了讓你使用一整套最新最酷的前端技術(shù),所有都是可配置,富特性,基于已經(jīng)提供代碼熱加載,使用預(yù)處理,單元測(cè)試,代碼覆蓋率報(bào)告,代碼分割等等更多。 Universal React Starter Kit 服務(wù)端渲染的React手腳架 這個(gè)啟動(dòng)包的設(shè)計(jì)是為了讓你使用一整套最新最酷的前端技術(shù),所有都是可配置,富特性,基于webpack已經(jīng)提供代碼熱加載,使用...

    RayKr 評(píng)論0 收藏0
  • 服務(wù)端渲染的React手腳。完美使用 React, Redux, and React-Router

    摘要:服務(wù)端渲染的手腳架這個(gè)啟動(dòng)包的設(shè)計(jì)是為了讓你使用一整套最新最酷的前端技術(shù),所有都是可配置,富特性,基于已經(jīng)提供代碼熱加載,使用預(yù)處理,單元測(cè)試,代碼覆蓋率報(bào)告,代碼分割等等更多。 Universal React Starter Kit 服務(wù)端渲染的React手腳架 這個(gè)啟動(dòng)包的設(shè)計(jì)是為了讓你使用一整套最新最酷的前端技術(shù),所有都是可配置,富特性,基于webpack已經(jīng)提供代碼熱加載,使用...

    DC_er 評(píng)論0 收藏0
  • angularjs + requirejs 完整的手腳

    摘要:還記得一年半前轉(zhuǎn)向后端的那種無助的感覺,獨(dú)自一人摸黑走路,學(xué)習(xí)各種前端知識(shí),走了不少?gòu)澛?,現(xiàn)在終于算是入門了前端我相信不少人也有我當(dāng)時(shí)同樣的無助,所以我在空閑時(shí)間整理了下所用到的知識(shí),便編寫了一個(gè)手腳架,希望能給其他正學(xué)習(xí)前端的同學(xué)一些參考 還記得一年半前轉(zhuǎn)向后端的那種無助的感覺,獨(dú)自一人摸黑走路,學(xué)習(xí)各種前端知識(shí),走了不少?gòu)澛罚F(xiàn)在終于算是入門了前端~我相信不少人也有我當(dāng)時(shí)同樣的無助...

    anyway 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<