koa2源码函数概述

application.js

Application

  • constructor
    • this.proxy = false;
    • this.middleware = [];
      
    • this.subdomainOffset = 2;
      
    • this.env = process.env.NODE_ENV || 'development';
      
    • this.context = Object.create(context);
      
    • this.request = Object.create(request);
      
    • this.response = Object.create(response);
      
  • listen
    • 接收参数,并使用Application的callback函数创建node.js服务器.args作为server.listen的实参.
  • toJSON
    • 将第二个参数的值添加到第一个参数的键位中
  • inspect
    • 检查接口
  • use
    • 接收一个函数,并检查他是否有废弃的方法,通过检测就将其压入middleware数组中
  • callback
    • dispatch函数介绍
      • compose会把中间件数组放入dispatch函数中并返回dispatch函数.该函数每次执行都会把index加1,并以该索引作为中间件数组的索引,当index与中间件数组长度一致时,则会将next函数作为fn来执行.当大于中间件数组长度时,fn则会是undefined并触发空的resolve函数
    • fn,执行fn(context,next)函数后会获得dispatch函数.
    • handleRequest,接收req和res参数,使用Application的createContext(req,res)函数创建ctx,并返回Application的handleRequest(ctx,fn)的返回值.
  • handleRequest
    • 内部的handleResponse函数会调用父级作用域的respond函数
  • createContext
    • 初始化ctx
  • onerror
    • 用以生成错误信息

respond

  • 一个辅助函数,他会使用res.end来关闭与传输数据,如果有数据的话.

context.js

inspect

  • 会调用context的toJSON方法

toJSON

  • 他会调用request,response和app的toJSON方法

assert

  • httpAssert
    • 断言检查,生成错误信息

throw

  • 接收参数并以此生成错误信息

onerror

  • 接收error对象,触发error事件,并生成HTTP错误码.最后会使用res.end传输信息并终止http连接.

cookies

  • get
    • 有cookie则返回,没有则创建cookie对象后再返回
  • set
    • 将接收的数据放入this[COOKIES]中

delegate

  • delegate是一个构造函数
    • 接收一个proto原型对象和一个字符串
  • method
    • 接收一个name字符串并把它压入methods数组中.之后再用用target与name往实例上添加一个方法.
  • access
    • 接收一个name字符串,先用他生成指定的getter,然后再用生成指定的setter并返回this.
  • getter
    • 接收一个name字符串,并把它压入getters数组中.并改写getter.返回this.
  • setter
    • 接收一个name字符串,并改写setter.返回this.
  • fluent
    • 接收一个name字符串,并压入fluents数组中.然后会在指定target的name属性下,赋值一个函数.该函数会将接收到的参数覆盖他自己.

request.js

header

  • set
    • 接受一个参数并赋值给this.req.headers
  • get
    • 获取this.req.headers

headers

  • 它是header的别名,功能完全一样

url

  • set
    • 接收一个参数并设置this.req.url
  • get
    • 获取this.req.url

origin

  • get
    • 拼接this.protocol与host并返回.

href

  • get
    • /^https?:///i
      • 这个正则等价于http(s){0,1}//.即匹配http://或https://.
    • 如果匹配正则,那么直接返回originalUrl,否则会将origin与originalUrl拼接后再返回.

method

  • get
    • 接收一个参数并赋值给this.req.method
  • set
    • 获取this.req.method

path

  • set
    • 接收一个path字符串,如果该参数与已有的pathname一直,则返回void.反正就将其赋值给url的pathname,并在序列化url之后覆盖之前的url
  • get
    • 函数内的parse函数会获取url的search,query,pathname等属性.这里只会返回pathname属性.

query

  • set
    • 接收一个obj对象,并在序列化后赋值给this.querystring
  • get
    • 获取查询字符串

querystring

  • set
    • 接收一个str字符串,并让parse解析并赋值给url.然后判断str是否为搜索字符串,如果是则返回void.否则在用序列化后的url覆盖之前的url.
  • get
    • this.req为false就返回空字符串.否则返回通过parse解析后的query字符串.如果解析失败则返回空字符串.

search

  • set
    • 接收字符串并赋值给this.querystring
  • get
    • 如果this.querysearch不为false,那么返回this.querysearch

host

  • get
    • 如果是通过代理访问则通过header的X-Forwarded-Host属性来获取主机原始地址.否则直接获取header.host属性获取主机地址.

hostname

  • get
    • this.host由域名与端口拼接而成,这里返回':'分隔符的前半段.

URL

  • get
    • 使用protocol,host与originalUrl合成一个url,并赋值给memoizedURL,然后返回.

fresh

  • get
    • 首先检查this.method是否是GET或HEAD,都不是返回false.然后检测this.ctx.status是否是200至300之间与304的状态,如果是则返回fresh(this.header, this.response.header)的结果,否则返回false.
    • fresh
      • 返回布尔值

stale

  • get
    • 返回this.fresh的非

idempotent

  • get
    • 检索this.method中是否有['GET', 'HEAD', 'PUT', 'DELETE', 'OPTIONS', 'TRACE']这些方法.有返回true否则返回false.

socket

  • get
    • 返回this.req.socket

charset

  • get
    • 获取header的Content-Type属性的值,如果该值为false则返回空字符串.否则将其作为contentType.parse函数的参数.最后返回type.parameters.charset || ''.

length

  • get
    • 返回header的Content-Length属性

protocol

  • get
    • 返回网络协议的字符串

secure

  • get
    • 确认协议是否是https

ips

  • get
    • 会将诸如"client, proxy1, proxy2"处理成["client, proxy1, proxy2"]

ip

  • set
    • 将参数_ip赋值给this.[IP]
  • get
    • 检查this[IP]是否存在,不存在则按照this.ips[0] || this.socket.remoteAddress || ''顺序来对this[IP]赋值.最后都会返回this[IP]

subdomains

  • get
    • 返回子域名构成的数组,如果是this.hostname是ip则返回空数组

accept

  • set
    • 传递一个obj对象并赋值给this._accept
  • get
    • 返回accept对象

accepts

  • 接收参数,并将其作为this.accept.types的参数,最后返回结果.

acceptsEncodings

  • 接收参数,并作为this.accept.encodings的参数

acceptsCharsets

  • 接受参数并作为this.accept.charsets函数的参数

acceptsLanguages

  • 接受参数并作为this.accept.languages函数的参数

is

type

  • get

get

  • 接收一个field字符串,然后返回this.req.headers[field],如果该属性不存在则返回空字符串.如果field为'referer'或'referrer'则返回req.headers.referrer||req.headers.referer||''

inspect

  • 返回this.toJSON的返回值

toJSON

  • 将第二个参数的值添加到第一个参数的键位中

response.js

socket

  • get
    • 返回this.res.socket

header

  • set
    • 返回this.header
  • get
    • 如果this.getHeaders是函数就执行该函数,否则按照顺序返回res._headers || {}

status

  • set
    • 将code数字赋值给this.res.statusCode.如果this.body不为false并且http状态码为返回空body的类型,则将this.body赋值为null
  • get
    • 返回this.res.statusCode

message

  • set
    • 接收一个msg并将其赋值给this.res.statusMessage
  • get
    • 按照this.res.statusMessage || statuses[this.status]的顺序返回值

body

  • set
    • 接收val参数,对无内容,buffer,stream,overwriting,json这些状况有各自的处理方式.
  • get
    • 返回this._body

length

  • set
    • 使用this.set对'Content-Length'属性设置参数
  • get
    • content-length为null,就会通过Buffer.byteLength(this.body)来返回长度,反正直接返回content-length的长度.

headerSent

  • get
    • 返回this.res.headersSent

vary

  • 如果this.res.headersSent;为真返回void.
  • 否则执行vary(this.res, field)
    • 该函数用以设置header的vary属性

redirect

  • 接收url和alt字符串,分别对location,status,html与text进行处理,其中status部分设置http状态码为302,html与text则设置重定向信息,html的escape函数用于转义特定字符.

attachment

  • 接收一个filename字符串,如果该字符串不为false,那么就将extname(filename)的返回值赋值给this.type.之后会设置'Content-Disposition'属性

lastModified

  • set
    • 接收一个val参数,类型为Date或字符串.如果val是字符串,则将new Date(val)的结果给val.之后将val.toUTCStrign()的结果作为'Last-Modified'的值.
  • get
    • 获取'last-modified'的值并赋值给date,如果该值不为false那么返回new Date(date)的结果.

etag

  • set
    • 进行W/的正则检测后设置为ETag的值
  • get
    • 获取this.get('ETag')的返回值

type

  • set
    • 接收一个type字符串,如果getType(type)的结果为真,那么就设置'Content-Type',否则移除'Content-Type'.
  • get
    • 获取header的'Content-Type'属性值,如果该值为false就返回空字符串,否则以';'符号分割后返回数组中的第一个元素.

is

get

  • 返回header指定的属性值

set

  • 接收header属性名field与值val,然后通过this.res.setHeader(field,val)函数进行设置.

append

  • 接收field和val字符串,通过this.get(field)获取header对应属性的值,然后将值转换成数组后赋值给val,最后通过this.set(field,val)设置header的属性值.

remove

  • 接收一个field字符串.如果this.headerSent为真则返回void.否则通过htis.res.removeHeader(filed)去移除指定的header属性.

writable

  • get
    • 会先通过this.res.finished检测是否已经完成了相应,完成相应会返回false.之后如果socket不为false则会返回socket.writable.

inspect

  • 将this.toJSON的结果赋值给o,并将this.body赋值给o.body并返回o.

toJSON

  • 将第二个参数的值添加到第一个参数的键位中

flushHeaders

  • 会执行this.res.flushHeaders函数

你可能感兴趣的:(koa2源码函数概述)