摘要:從一個(gè)對(duì)象里面提取需要的屬性這篇文章一直想寫(xiě)了還想起那一夜我看到白天的代碼,實(shí)在太美了。
koa源碼lib主要文件有
application.js
context.js
request.js
response.js
application.jskoa主要的邏輯處理代碼整個(gè)koa的處理
context.js將req,res方法 掛載在這,生成ctx上下文對(duì)象
requests.js封裝處理req對(duì)象
response.js封裝處理res對(duì)象
對(duì)于每個(gè)文件引入的庫(kù)
application.jsconst 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
摘要:感謝大神的免費(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ò)站了。大家可以很...
摘要:感謝大神的免費(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ò)站了。大家可以很...
摘要:目錄結(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)行...
摘要:我開(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)版...
閱讀 2706·2021-11-08 13:16
閱讀 2382·2021-10-18 13:30
閱讀 2255·2021-09-27 13:35
閱讀 2009·2019-08-30 15:55
閱讀 2458·2019-08-30 13:22
閱讀 597·2019-08-30 11:24
閱讀 2091·2019-08-29 12:33
閱讀 1825·2019-08-26 12:10