text: 'use strict';
  /**
   * error controller
   */
  export default class extends think.controller.base {
    /**
     * display error page
     * @param  {Number} status []
     * @return {Promise}        []
     */
    displayError(status){
  
      //hide error message on production env
      if(think.env === 'production'){
        this.http.error = null;
      }
  
      let errorConfig = this.config('error');
      let message = this.http.error && this.http.error.message || '';
      if(this.isJsonp()){
        return this.jsonp({
          [errorConfig.key]: status,
          [errorConfig.msg]: message
        })
      }else if(this.isAjax()){
        return this.fail(status, message);
      }
  
      let module = 'common';
      if(think.mode !== think.mode_module){
        module = this.config('default_module');
      }
      let file = `${module}/error/${status}.html`;
      let options = this.config('tpl');
      options = think.extend({}, options, {type: 'base', file_depr: '_'});
      this.fetch(file, {}, options).then(content => {
        content = content.replace('ERROR_MESSAGE', message);
        this.type(options.content_type);
        this.end(content);
      });
    }
    /**
     * Bad Request 
     * @return {Promise} []
     */
    _400Action(){
      return this.displayError(400);
    }
    /**
     * Forbidden 
     * @return {Promise} []
     */
    _403Action(){
      return this.displayError(403);
    }
    /**
     * Not Found 
     * @return {Promise}      []
     */
    _404Action(){
      return this.displayError(404);
    }
    /**
     * Internal Server Error
     * @return {Promise}      []
     */
    _500Action(){
      return this.displayError(500);
    }
    /**
     * Service Unavailable
     * @return {Promise}      []
     */
    _503Action(){
      return this.displayError(503);
    }
  }