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)的返回值.
- dispatch函数介绍
- 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拼接后再返回.
- /^https?:///i
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函数