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函數