成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

koa源碼閱讀之目錄結(jié)構(gòu)與輔助庫(kù)相關(guān)

sherlock221 / 3428人閱讀

摘要:從一個(gè)對(duì)象里面提取需要的屬性這篇文章一直想寫(xiě)了還想起那一夜我看到白天的代碼,實(shí)在太美了。

koa源碼lib主要文件有

application.js

context.js

request.js

response.js

application.js

koa主要的邏輯處理代碼整個(gè)koa的處理

context.js

將req,res方法 掛載在這,生成ctx上下文對(duì)象

requests.js

封裝處理req對(duì)象

response.js

封裝處理res對(duì)象

對(duì)于每個(gè)文件引入的庫(kù)

application.js
const isGeneratorFunction = require("is-generator-function");
//判斷是不是generator function
const debug = require("debug")("koa:application");
//設(shè)置debug 的`namespace`
const onFinished = require("on-finished");
//執(zhí)行回調(diào)當(dāng)http request關(guān)閉結(jié)束或者有錯(cuò)誤的時(shí)候
const response = require("./response");
//引入response
const compose = require("koa-compose");
//重頭戲 koa-compose
const isJSON = require("koa-is-json");
//判斷body是否應(yīng)該為JSON //string 假值或者為stream或者buffer的時(shí)候返回false
const context = require("./context");
const request = require("./request");
const statuses = require("statuses");
//下面只用了empty方法
//statuses是一個(gè)對(duì)象 empty屬性
//status.empty = {
//  204: true,
//  205: true,
//  304: true
//}
const Cookies = require("cookies");
//獲取設(shè)置http(s)cookie的模塊
const accepts = require("accepts");
//http accepts
//Accept 請(qǐng)求頭用來(lái)告知客戶端可以處理的內(nèi)容類型,這種內(nèi)容類型用MIME類型來(lái)表示
const Emitter = require("events");
//事件機(jī)制
const assert = require("assert");
//斷言庫(kù)
const Stream = require("stream");
// stream模塊
const http = require("http");
//引入http模塊
const only = require("only");
//返回對(duì)象的指定鍵值
const convert = require("koa-convert");
//將基于koa生成器的中間件轉(zhuǎn)換為基于promise的中間件
const deprecate = require("depd")("koa");
//給出一些信息(標(biāo)志已經(jīng)棄用)
context.js
const createError = require("http-errors");
//用于throw方法 制造一個(gè)http錯(cuò)誤(createError(401, "Please login to view this page."))
//類似于這種用法
const httpAssert = require("http-assert");
//用于斷言處理,可以返回ctx.throw之類的給捕捉
const delegate = require("delegates");
//用來(lái)委托方法 getter 與setter
const statuses = require("statuses");
request.js
const net = require("net");
const contentType = require("content-type");
//用于解析Content-Type
const stringify = require("url").format;
const parse = require("parseurl");
//解析url(帶記憶)內(nèi)部有一個(gè)fastparse 方法
const qs = require("querystring");
//用于處理query字符串
const typeis = require("type-is");
const fresh = require("fresh");
//檢測(cè)304之類的
const only = require("only");
//獲得對(duì)象指定的鍵值
response.js
const contentDisposition = require("content-disposition");
//創(chuàng)建和解析Content-Disposition頭部信息
const ensureErrorHandler = require("error-inject");
//在stream中注入錯(cuò)誤信息
const getType = require("mime-types").contentType;
const onFinish = require("on-finished");
//在http請(qǐng)求結(jié)束前完成或者有錯(cuò)誤的時(shí)候執(zhí)行回調(diào)
const isJSON = require("koa-is-json");
/**
function isJSON(body) {
  if (!body) return false;
  if ("string" == typeof body) return false;
  if ("function" == typeof body.pipe) return false;
  if (Buffer.isBuffer(body)) return false;
  return true;
}
*/
const escape = require("escape-html");
//用于HTML字符串轉(zhuǎn)義
const typeis = require("type-is").is;
//typeis.is(mediaType, types)
/**
var mediaType = "application/json"

typeis.is(mediaType, ["json"])             // "json"
typeis.is(mediaType, ["html", "json"])     // "json"
typeis.is(mediaType, ["application/*"])    // "application/json"
typeis.is(mediaType, ["application/json"]) // "application/json"

typeis.is(mediaType, ["html"]) // false
*/
const statuses = require("statuses");
//被nodejs所支持的狀態(tài)碼

const destroy = require("destroy");
const assert = require("assert");
const extname = require("path").extname;
//返回?cái)U(kuò)展名
const vary = require("vary");
//header 的 vary字段 后面 追加 val值。
const only = require("only");
//從一個(gè)對(duì)象里面提取需要的屬性

這篇文章一直想寫(xiě)了
還想起那一夜我看到白天的代碼,實(shí)在太美了。也希望自己能做下筆記
其實(shí)我使用nodejs的經(jīng)驗(yàn)都很少,包都是引入通過(guò)npmjs查找,然后大多數(shù)包都是大概看了下使用方法與用于,難免有所偏差
(當(dāng)然后面會(huì)對(duì)一些包做分析)
如果有高手,希望不吝賜教!
感謝你的閱讀

參考資料
koa

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

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

相關(guān)文章

  • 【全文】狼叔:如何正確的學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類中文書(shū)籍收錄并推薦地址,以后在倉(cāng)庫(kù)里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡(jiǎn)介現(xiàn)在,越來(lái)越多的科技公司和開(kāi)發(fā)者開(kāi)始使用開(kāi)發(fā)各種應(yīng)用。 說(shuō)明 2017-12-14 我發(fā)了一篇文章《沒(méi)用過(guò)Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車(chē)的還坐過(guò)站了。大家可以很...

    Edison 評(píng)論0 收藏0
  • 【全文】狼叔:如何正確的學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類中文書(shū)籍收錄并推薦地址,以后在倉(cāng)庫(kù)里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡(jiǎn)介現(xiàn)在,越來(lái)越多的科技公司和開(kāi)發(fā)者開(kāi)始使用開(kāi)發(fā)各種應(yīng)用。 說(shuō)明 2017-12-14 我發(fā)了一篇文章《沒(méi)用過(guò)Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車(chē)的還坐過(guò)站了。大家可以很...

    fengxiuping 評(píng)論0 收藏0
  • 重拾golang - go目錄結(jié)構(gòu)說(shuō)明

    摘要:目錄結(jié)構(gòu)說(shuō)明集多編程范式之大成者,使開(kāi)發(fā)者能夠快速的開(kāi)發(fā)測(cè)試部署程序,支持全平臺(tái)靜態(tài)編譯。上目錄位置主要目錄包含如下圖,分別進(jìn)行說(shuō)明文件夾存放檢查器的輔助文件。工作區(qū)有個(gè)子目錄目錄目錄和目錄。目錄用于以代碼包的形式組織并保存源碼文件。 go 目錄結(jié)構(gòu)說(shuō)明 ??golang集多編程范式之大成者,使開(kāi)發(fā)者能夠快速的開(kāi)發(fā)、測(cè)試、部署程序,支持全平臺(tái)靜態(tài)編譯。go具有優(yōu)秀的依賴管理,高效的運(yùn)行...

    zhisheng 評(píng)論0 收藏0
  • js進(jìn)化,遷徙到typescript

    摘要:我開(kāi)始重新了解一下的現(xiàn)狀,沒(méi)想到已經(jīng)完全走上正軌了,在上已經(jīng)有大量的項(xiàng)目選用,投入生產(chǎn)于是報(bào)著嘗試的心態(tài),開(kāi)始了遷徙。 js進(jìn)化,遷徙到typescript TypeScript 歷史 TypeScript是一種由微軟開(kāi)發(fā)的自由和開(kāi)源的編程語(yǔ)言 它是JavaScript的一個(gè)超集,而且本質(zhì)上向這個(gè)語(yǔ)言添加了可選的靜態(tài)類型和基于類的面向?qū)ο缶幊?2012年十月份,微軟發(fā)布了首個(gè)公開(kāi)版...

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

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

0條評(píng)論

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