摘要:從一個對象里面提取需要的屬性這篇文章一直想寫了還想起那一夜我看到白天的代碼,實在太美了。
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"); //設置debug 的`namespace` const onFinished = require("on-finished"); //執行回調當http request關閉結束或者有錯誤的時候 const response = require("./response"); //引入response const compose = require("koa-compose"); //重頭戲 koa-compose const isJSON = require("koa-is-json"); //判斷body是否應該為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"); //獲取設置http(s)cookie的模塊 const accepts = require("accepts"); //http accepts //Accept 請求頭用來告知客戶端可以處理的內容類型,這種內容類型用MIME類型來表示 const Emitter = require("events"); //事件機制 const assert = require("assert"); //斷言庫 const Stream = require("stream"); // stream模塊 const http = require("http"); //引入http模塊 const only = require("only"); //返回對象的指定鍵值 const convert = require("koa-convert"); //將基于koa生成器的中間件轉換為基于promise的中間件 const deprecate = require("depd")("koa"); //給出一些信息(標志已經棄用)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(帶記憶)內部有一個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"); //創建和解析Content-Disposition頭部信息 const ensureErrorHandler = require("error-inject"); //在stream中注入錯誤信息 const getType = require("mime-types").contentType; const onFinish = require("on-finished"); //在http請求結束前完成或者有錯誤的時候執行回調 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字符串轉義 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所支持的狀態碼 const destroy = require("destroy"); const assert = require("assert"); const extname = require("path").extname; //返回擴展名 const vary = require("vary"); //header 的 vary字段 后面 追加 val值。 const only = require("only"); //從一個對象里面提取需要的屬性
這篇文章一直想寫了
還想起那一夜我看到白天的代碼,實在太美了。也希望自己能做下筆記
其實我使用nodejs的經驗都很少,包都是引入通過npmjs查找,然后大多數包都是大概看了下使用方法與用于,難免有所偏差
(當然后面會對一些包做分析)
如果有高手,希望不吝賜教!
感謝你的閱讀
參考資料
koa
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/87171.html
摘要:感謝大神的免費的計算機編程類中文書籍收錄并推薦地址,以后在倉庫里更新地址,聲音版全文狼叔如何正確的學習簡介現在,越來越多的科技公司和開發者開始使用開發各種應用。 說明 2017-12-14 我發了一篇文章《沒用過Node.js,就別瞎逼逼》是因為有人在知乎上黑Node.js。那篇文章的反響還是相當不錯的,甚至連著名的hax賀老都很認同,下班時讀那篇文章,竟然坐車的還坐過站了。大家可以很...
摘要:感謝大神的免費的計算機編程類中文書籍收錄并推薦地址,以后在倉庫里更新地址,聲音版全文狼叔如何正確的學習簡介現在,越來越多的科技公司和開發者開始使用開發各種應用。 說明 2017-12-14 我發了一篇文章《沒用過Node.js,就別瞎逼逼》是因為有人在知乎上黑Node.js。那篇文章的反響還是相當不錯的,甚至連著名的hax賀老都很認同,下班時讀那篇文章,竟然坐車的還坐過站了。大家可以很...
摘要:目錄結構說明集多編程范式之大成者,使開發者能夠快速的開發測試部署程序,支持全平臺靜態編譯。上目錄位置主要目錄包含如下圖,分別進行說明文件夾存放檢查器的輔助文件。工作區有個子目錄目錄目錄和目錄。目錄用于以代碼包的形式組織并保存源碼文件。 go 目錄結構說明 ??golang集多編程范式之大成者,使開發者能夠快速的開發、測試、部署程序,支持全平臺靜態編譯。go具有優秀的依賴管理,高效的運行...
摘要:我開始重新了解一下的現狀,沒想到已經完全走上正軌了,在上已經有大量的項目選用,投入生產于是報著嘗試的心態,開始了遷徙。 js進化,遷徙到typescript TypeScript 歷史 TypeScript是一種由微軟開發的自由和開源的編程語言 它是JavaScript的一個超集,而且本質上向這個語言添加了可選的靜態類型和基于類的面向對象編程 2012年十月份,微軟發布了首個公開版...
閱讀 2696·2021-11-08 13:16
閱讀 2374·2021-10-18 13:30
閱讀 2242·2021-09-27 13:35
閱讀 1997·2019-08-30 15:55
閱讀 2447·2019-08-30 13:22
閱讀 590·2019-08-30 11:24
閱讀 2083·2019-08-29 12:33
閱讀 1817·2019-08-26 12:10