摘要:從一個對象里面提取需要的屬性這篇文章一直想寫了還想起那一夜我看到白天的代碼,實(shí)在太美了。
koa源碼lib主要文件有
application.js
context.js
request.js
response.js
application.jskoa主要的邏輯處理代碼整個koa的處理
context.js將req,res方法 掛載在這,生成ctx上下文對象
requests.js封裝處理req對象
response.js封裝處理res對象
對于每個文件引入的庫
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é)束或者有錯誤的時候 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的時候返回false const context = require("./context"); const request = require("./request"); const statuses = require("statuses"); //下面只用了empty方法 //statuses是一個對象 empty屬性 //status.empty = { // 204: true, // 205: true, // 304: true //} const Cookies = require("cookies"); //獲取設(shè)置http(s)cookie的模塊 const accepts = require("accepts"); //http accepts //Accept 請求頭用來告知客戶端可以處理的內(nèi)容類型,這種內(nèi)容類型用MIME類型來表示 const Emitter = require("events"); //事件機(jī)制 const assert = require("assert"); //斷言庫 const Stream = require("stream"); // stream模塊 const http = require("http"); //引入http模塊 const only = require("only"); //返回對象的指定鍵值 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方法 制造一個http錯誤(createError(401, "Please login to view this page.")) //類似于這種用法 const httpAssert = require("http-assert"); //用于斷言處理,可以返回ctx.throw之類的給捕捉 const delegate = require("delegates"); //用來委托方法 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)部有一個fastparse 方法 const qs = require("querystring"); //用于處理query字符串 const typeis = require("type-is"); const fresh = require("fresh"); //檢測304之類的 const only = require("only"); //獲得對象指定的鍵值response.js
const contentDisposition = require("content-disposition"); //創(chuàng)建和解析Content-Disposition頭部信息 const ensureErrorHandler = require("error-inject"); //在stream中注入錯誤信息 const getType = require("mime-types").contentType; const onFinish = require("on-finished"); //在http請求結(jié)束前完成或者有錯誤的時候執(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"); //從一個對象里面提取需要的屬性
這篇文章一直想寫了
還想起那一夜我看到白天的代碼,實(shí)在太美了。也希望自己能做下筆記
其實(shí)我使用nodejs的經(jīng)驗(yàn)都很少,包都是引入通過npmjs查找,然后大多數(shù)包都是大概看了下使用方法與用于,難免有所偏差
(當(dāng)然后面會對一些包做分析)
如果有高手,希望不吝賜教!
感謝你的閱讀
參考資料
koa
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/87171.html
摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類中文書籍收錄并推薦地址,以后在倉庫里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡介現(xiàn)在,越來越多的科技公司和開發(fā)者開始使用開發(fā)各種應(yīng)用。 說明 2017-12-14 我發(fā)了一篇文章《沒用過Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯的,甚至連著名的hax賀老都很認(rèn)同,下班時讀那篇文章,竟然坐車的還坐過站了。大家可以很...
摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類中文書籍收錄并推薦地址,以后在倉庫里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡介現(xiàn)在,越來越多的科技公司和開發(fā)者開始使用開發(fā)各種應(yīng)用。 說明 2017-12-14 我發(fā)了一篇文章《沒用過Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯的,甚至連著名的hax賀老都很認(rèn)同,下班時讀那篇文章,竟然坐車的還坐過站了。大家可以很...
摘要:目錄結(jié)構(gòu)說明集多編程范式之大成者,使開發(fā)者能夠快速的開發(fā)測試部署程序,支持全平臺靜態(tài)編譯。上目錄位置主要目錄包含如下圖,分別進(jìn)行說明文件夾存放檢查器的輔助文件。工作區(qū)有個子目錄目錄目錄和目錄。目錄用于以代碼包的形式組織并保存源碼文件。 go 目錄結(jié)構(gòu)說明 ??golang集多編程范式之大成者,使開發(fā)者能夠快速的開發(fā)、測試、部署程序,支持全平臺靜態(tài)編譯。go具有優(yōu)秀的依賴管理,高效的運(yùn)行...
摘要:我開始重新了解一下的現(xiàn)狀,沒想到已經(jīng)完全走上正軌了,在上已經(jīng)有大量的項(xiàng)目選用,投入生產(chǎn)于是報(bào)著嘗試的心態(tài),開始了遷徙。 js進(jìn)化,遷徙到typescript TypeScript 歷史 TypeScript是一種由微軟開發(fā)的自由和開源的編程語言 它是JavaScript的一個超集,而且本質(zhì)上向這個語言添加了可選的靜態(tài)類型和基于類的面向?qū)ο缶幊?2012年十月份,微軟發(fā)布了首個公開版...
閱讀 2784·2021-11-08 13:16
閱讀 2444·2021-10-18 13:30
閱讀 2355·2021-09-27 13:35
閱讀 2109·2019-08-30 15:55
閱讀 2513·2019-08-30 13:22
閱讀 662·2019-08-30 11:24
閱讀 2170·2019-08-29 12:33
閱讀 1898·2019-08-26 12:10