Koa學習筆記:服務器端錯誤狀態碼返回方式

Koa實例提供給中間件的上下文對象context,在對客戶端返回請求錯誤的狀態碼時有兩種方式:git

  • context.throw()
  • context.response.status

這兩種方法有兩點區別:github

response.body的自定義權

使用context.throw()方法會返回指定的狀態碼和默認的response.body,而使用context.response.status設置狀態碼以後,能夠自定義response.body的內容。api

如,設置context.throw(404)狀態碼,response.body的內容默認爲Not Found
各類狀態碼默認返回的response.body與規範一致,默認只推薦設置4xx5xx的狀態碼。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);
  },
相關文章
相關標籤/搜索