资讯专栏INFORMATION COLUMN

koa源码阅读之目录结构与辅助库相关

sherlock221 / 3387人阅读

摘要:从一个对象里面提取需要的属性这篇文章一直想写了还想起那一夜我看到白天的代码,实在太美了。

koa源码lib主要文件有

application.js

context.js

request.js

response.js

application.js

koa主要的逻辑处理代码整个koa的处理

context.js

将req,res方法 挂载在这,生成ctx上下文对象

requests.js

封装处理req对象

response.js

封装处理res对象

对于每个文件引入的库

application.js
const 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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87171.html

相关文章

  • 【全文】狼叔:如何正确的学习Node.js

    摘要:感谢大神的免费的计算机编程类中文书籍收录并推荐地址,以后在仓库里更新地址,声音版全文狼叔如何正确的学习简介现在,越来越多的科技公司和开发者开始使用开发各种应用。 说明 2017-12-14 我发了一篇文章《没用过Node.js,就别瞎逼逼》是因为有人在知乎上黑Node.js。那篇文章的反响还是相当不错的,甚至连著名的hax贺老都很认同,下班时读那篇文章,竟然坐车的还坐过站了。大家可以很...

    Edison 评论0 收藏0
  • 【全文】狼叔:如何正确的学习Node.js

    摘要:感谢大神的免费的计算机编程类中文书籍收录并推荐地址,以后在仓库里更新地址,声音版全文狼叔如何正确的学习简介现在,越来越多的科技公司和开发者开始使用开发各种应用。 说明 2017-12-14 我发了一篇文章《没用过Node.js,就别瞎逼逼》是因为有人在知乎上黑Node.js。那篇文章的反响还是相当不错的,甚至连著名的hax贺老都很认同,下班时读那篇文章,竟然坐车的还坐过站了。大家可以很...

    fengxiuping 评论0 收藏0
  • 重拾golang - go目录结构说明

    摘要:目录结构说明集多编程范式之大成者,使开发者能够快速的开发测试部署程序,支持全平台静态编译。上目录位置主要目录包含如下图,分别进行说明文件夹存放检查器的辅助文件。工作区有个子目录目录目录和目录。目录用于以代码包的形式组织并保存源码文件。 go 目录结构说明   golang集多编程范式之大成者,使开发者能够快速的开发、测试、部署程序,支持全平台静态编译。go具有优秀的依赖管理,高效的运行...

    zhisheng 评论0 收藏0
  • js进化,迁徙到typescript

    摘要:我开始重新了解一下的现状,没想到已经完全走上正轨了,在上已经有大量的项目选用,投入生产于是报着尝试的心态,开始了迁徙。 js进化,迁徙到typescript TypeScript 历史 TypeScript是一种由微软开发的自由和开源的编程语言 它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程 2012年十月份,微软发布了首个公开版...

    Alan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<