The think.controller.base class inherit from think.http.base class, controllers in project need to inherit it.
export default class extends think.controller.base {
  indexAction(){
  }
}module.exports = think.controller({
  indexAction(){
  }
})Passed http object.
return {String}Get user ip of current request, it is equal to http.ip.
export default class extends think.controller.base {
  indexAction(){
    let ip = this.ip();
  }
}return {String}Get type of current request, and convert to lowercase.
export default class extends think.controller.base {
  indexAction(){
    let method = this.method(); //get or post ...
  }
}method {String} methodreturn {Boolean}Judge type of current request is named types.
return {Boolean}Judge is GET request or not.
return {Boolean}Judge is POST request.
method {String}return {Boolean}Judge is Ajax request, if named method, then as same as the type of request.
export default class extends think.controller.base {
  indexAction(){
    // is ajax and request type is POST
    let isAjax = this.isAjax('post');
  }
}return {Boolean}Whether is websocket request or not.
return {Boolean}Whether is run in command mode or not.
callback {String} callback namereturn {Boolean}Whether is jsonp request.
name {String} parameter nameGet parameter of GET.
export default class extends think.controller.base {
  indexAction(){
    // get a parameter
    let value = this.get('xxx');
    // get all parameter
    let values = this.get();
  }
}name {String} parameter nameGet parameter of POST data.
export default class extends think.controller.base {
  indexAction(){
    // get a value of parameter
    let value = this.post('xxx');
    // get all parameter of POST
    let values = this.post();
  }
}name {String} parameter nameGet parameter value, first to read from POST, if return null, then get from GET.
name {String} field name of upload fileGet uploaded file, return value is a object, contains these method below:
{
  fieldName: 'file', // field name
  originalFilename: filename, // original file name
  path: filepath, // path of temp store file, need to move this path when using, or exists until request ends.
  size: 1000 // file size
}If file not exist, this returning is an empty object {}.
name {String} header namevalue {String} header valueGet or set header。
export default class extends think.controller.base {
  indexAction(){
    let accept = this.header('accept'); // get header
    this.header('X-NAME', 'thinks'); // set header
  }
}time {Number} expires time, the unit is secondsStrong cache, set Cache-Control and Expires header information.
export default class extends think.controller.base {
  indexAction(){
    this.expires(86400); // set expire time to one day.
  }
}Get userAgent。
referrer {Boolean} whether only need hostGet referrer。
name {String} cookie namevalue {String} cookie valueoptions {Object}Get or set cookie。
export default class extends think.controller.base {
  indexAction(){
    // get value of cookie
    let value = this.cookie('think_name');
  }
}export default class extends think.controller.base {
  indexAction(){
    // get value of cookie
    this.cookie('think_name', value, {
      timeout: 3600 * 24 * 7 // expires time is one week
    });
  }
}name {String} session namevalue {Mixed} session valuereturn {Promise}Read, set and clean session。
export default class extends think.controller.base {
  async indexAction(){
    // read session
    let value = await this.session('userInfo');
  }
}export default class extends think.controller.base {
  async indexAction(){
    //set session
    await this.session('userInfo', data);
  }
}export default class extends think.controller.base {
  async indexAction(){
    //清除当前用户的 session
    await this.session();
  }
}lang {String} the setup of languageasViewPath {Boolean} whether add a directory layer for language template.Read or set language.
key {String} Based on language to get the language version.
url {String} the url to jumpstatusCode {Number} status code, default is 302Page jump.
name {String | Object} variable namevalue {Mixed} variable valueAssign variable into template.
export default class extends think.controller.base {
  indexAction(){
    // single assign
    this.assign('title', 'thinkjs');
    // multi-assign
    this.assign({
      name: 'xxx',
      desc: 'yyy'
    })
  }
}templateFile {String} tempate file pathreturn {Promise}Get the parsed template content.
// suppose the file path is /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
  async indexAction(){
    // home/index_index.html
    let content = await this.fetch();
  }
}// suppose file path is /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
  async indexAction(){
    // home/index_detail.html
    let content = await this.fetch('detail');
  }
}// suppose file path is /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
  async indexAction(){
    // home/user_detail.html
    let content = await this.fetch('user/detail');
  }
}// suppose file path is /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
  async indexAction(){
    // admin/user_detail.html
    let content = await this.fetch('admin/user/detail');
  }
}// suppose file path is /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
  async indexAction(){
    // home/index_detail.xml
    let content = await this.fetch('detail.xml');
  }
}// suppose file path is /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
  async indexAction(){
    // /home/xxx/aaa/bbb/c.html
    let content = await this.fetch('/home/xxx/aaa/bbb/c.html');
  }
}templateFile {String} template file pathOutput template content to browser side. strategy of finding template is the same as controller.fetch.
data {Mixed} content to outputUsing the way of jsonp to output content, after getting callback's name and security filter then output.
export default class extends think.controller.base {
  indexAction(){
    this.jsonp({name: 'thinkjs'});
    //writes
    'callback_fn_name({name: "thinkjs"})'
  }
}data {Mixed} the output contentJson way to output.
status {Number} status code, default is 404Set status code.
status {String} status code, default is 403Deny current request.
data {mixed} the output contentencoding {String} charsetOutput content.
data {mixed} the output contentencoding {String} charsetAfter output content, end current request.
type {String} Content-Typecharset {Boolean} wheher append charset or notSet Content-Type。
filePath {String} specified path of download filecontent-Type {String} Content-TypefileName {String} error file nameDownload file.
export default class extends think.controller.base {
  indexAction(){
    let filePath = think.RESOUCE_PATH + '/a.txt';
    // auto identify Content-Type, save file to a.txt
    this.download(filePath);
  }
}export default class extends think.controller.base {
  indexAction(){
    let filePath = think.RESOUCE_PATH + '/a.log';
    // auto identify Content-Type, save file to b.txt
    this.download(filePath, 'b.txt');
  }
}export default class extends think.controller.base {
  indexAction(){
    let filePath = think.RESOUCE_PATH + '/a.log';
    // specify Content-Type to text/html, save file to b.txt
    this.download(filePath, 'text/html', 'b.txt');
  }
}data {Mixed} the output datamessage {String} appended messageOutput an normal formatted data, often after operate success.
http.success({name: 'thinkjs'});
//writes
{
  errno: 0,
  errmsg: '',
  data: {
    name: 'thinkjs'
  }
}Client can based on error is 0 or not to judge current request is success.
errno {Number} error numbererrmsg {String} error messagedata {Mixed} extra dataOutput an unusual formatted data, normally after operate failed.
Notice: field name errno and errmsg can been modified in config.
http.fail(100, 'fail')
//writes
{
  errno: 100,
  errmsg: 'fail',
  data: ''
}In this way, client will get detail error number and error message, then show message according to the need.
Notice: filed name errno and errmsg can been modified in config.
name {String} header keyThe execute time of send request, send with header.