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

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

    原文作者:ZWkang
    原文地址: https://segmentfault.com/a/1190000010582618
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞