Koa實例提供給中間件的上下文對象context
,在對客戶端返回請求錯誤的狀態碼時有兩種方式:git
context.throw()
context.response.status
這兩種方法有兩點區別:github
使用context.throw()
方法會返回指定的狀態碼和默認的response.body,而使用context.response.status
設置狀態碼以後,能夠自定義response.body的內容。api
如,設置context.throw(404)
狀態碼,response.body
的內容默認爲Not Found
。
各類狀態碼默認返回的response.body
與規範一致,默認只推薦設置4xx
與5xx
的狀態碼。ui
context.throw()
調用結束後此次響應當即結束,在其後的邏輯不會執行,而經過設置context.response.status
返回錯誤狀態碼以後的邏輯依然能夠有效執行,能夠經過輸出到控制檯觀察到這樣的區別。這是由於throw
方法是直接拋出錯誤,可從官方源碼裏看出:this
/** * Throw an error with `msg` and optional `status` * defaulting to 500. Note that these are user-level * errors, and the message may be exposed to the client. * * this.throw(403) * this.throw('name required', 400) * this.throw(400, 'name required') * this.throw('something exploded') * this.throw(new Error('invalid'), 400); * this.throw(400, new Error('invalid')); * * See: https://github.com/jshttp/http-errors * * @param {String|Number|Error} err, msg or status * @param {String|Number|Error} [err, msg or status] * @param {Object} [props] * @api public */ throw(...args) { throw createError(...args); },