99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

controller(控制器類)

2021-09-17 14:29 更新

think.controller.base 繼承自 think.http.base 類。項(xiàng)目里的控制器需要繼承該類。

使用 ES6 的語(yǔ)法繼承該類
export default class extends think.controller.base {
  indexAction(){

  }
}
使用普通方式繼承該類
module.exports = think.controller({
  indexAction(){

  }
})

屬性

controller.http

傳遞進(jìn)來的 http 對(duì)象。

方法

controller.ip()

  • return {String}

獲取當(dāng)前請(qǐng)求用戶的 ip,等同與 http.ip 方法。

export default class extends think.controller.base {
  indexAction(){
    let ip = this.ip();
  }
}

controller.method()

  • return {String}

獲取當(dāng)前請(qǐng)求的類型,轉(zhuǎn)化為小寫。

export default class extends think.controller.base {
  indexAction(){
    let method = this.method(); //get or post ...
  }
}

controller.isMethod(method)

  • method {String} 類型
  • return {Boolean}

判斷當(dāng)前的請(qǐng)求類型是否是指定的類型。

controller.isGet()

  • return {Boolean}

判斷是否是 GET 請(qǐng)求。

controller.isPost()

  • return {Boolean}

判斷是否是 POST 請(qǐng)求。

controller.isAjax(method)

  • method {String}
  • return {Boolean}

判斷是否是 Ajax 請(qǐng)求。如果指定了 method,那么請(qǐng)求類型也要相同。

export default class extends think.controller.base {
  indexAction(){
    //是ajax 且請(qǐng)求類型是 POST
    let isAjax = this.isAjax("post");
  }
}

controller.isWebSocket()

  • return {Boolean}

是否是 websocket 請(qǐng)求。

controller.isCli()

  • return {Boolean}

是否是命令行下調(diào)用。

controller.isJsonp(callback)

  • callback {String} callback 名稱
  • return {Boolean}

是否是 jsonp 請(qǐng)求。

controller.get(name)

  • name {String} 參數(shù)名

獲取 GET 參數(shù)值。

export default class extends think.controller.base {
  indexAction(){
    //獲取一個(gè)參數(shù)值
    let value = this.get("xxx");
    //獲取所有的參數(shù)值
    let values = this.get();
  }
}

controller.post(name)

  • name {String} 參數(shù)名

獲取 POST 提交的參數(shù)。

export default class extends think.controller.base {
  indexAction(){
    //獲取一個(gè)參數(shù)值
    let value = this.post("xxx");
    //獲取所有的 POST 參數(shù)值
    let values = this.post();
  }
}

controller.param(name)

  • name {String} 參數(shù)名

獲取參數(shù)值,優(yōu)先從 POST 里獲取,如果取不到再?gòu)?GET 里獲取。

controller.file(name)

  • name {String} 上傳文件對(duì)應(yīng)的字段名

獲取上傳的文件,返回值是個(gè)對(duì)象,包含下面的屬性:

{
  fieldName: "file", //表單字段名稱
  originalFilename: filename, //原始的文件名
  path: filepath, //文件保存的臨時(shí)路徑,使用時(shí)需要將其移動(dòng)到項(xiàng)目里的目錄,否則請(qǐng)求結(jié)束時(shí)會(huì)被刪除
  size: 1000 //文件大小
}

如果文件不存在,那么值為一個(gè)空對(duì)象 {}。

controller.header(name, value)

  • name {String} header 名
  • value {String} header 值

獲取或者設(shè)置 header。

export default class extends think.controller.base {
  indexAction(){
    let accept = this.header("accept"); //獲取 header
    this.header("X-NAME", "thinks"); //設(shè)置 header
  }
}

controller.expires(time)

  • time {Number} 過期時(shí)間,單位為秒

強(qiáng)緩存,設(shè)置 Cache-Control 和 Expires 頭信息。

export default class extends think.controller.base {
  indexAction(){
    this.expires(86400); //設(shè)置過期時(shí)間為 1 天。
  }
}

controller.userAgent()

獲取 userAgent。

controller.referrer(onlyHost)

  • referrer {Boolean} 是否只需要 host

獲取 referrer。

controller.cookie(name, value, options)

  • name {String} cookie 名
  • value {String} cookie 值
  • options {Object}

獲取或者設(shè)置 cookie。

export default class extends think.controller.base {
  indexAction(){
    //獲取 cookie 值
    let value = this.cookie("think_name");
  }
}
export default class extends think.controller.base {
  indexAction(){
    //設(shè)置 cookie 值
    this.cookie("think_name", value, {
      timeout: 3600 * 24 * 7 //有效期為一周
    });
  }
}

controller.session(name, value)

  • name {String} session 名
  • value {Mixed} session 值
  • return {Promise}

讀取、設(shè)置和清除 session。

讀取 Session
export default class extends think.controller.base {
  * indexAction(){
    //獲取session
    let value = yield this.session("userInfo");
  }
}
設(shè)置 Session
export default class extends think.controller.base {
  * indexAction(){
    //設(shè)置 session
    yield this.session("userInfo", data);
  }
}
清除 Session
export default class extends think.controller.base {
  * indexAction(){
    //清除當(dāng)前用戶的 session
    yield this.session();
  }
}

controller.lang(lang, asViewPath)

  • lang {String} 要設(shè)置的語(yǔ)言
  • asViewPath {Boolean} 是否在模版目錄添加一層語(yǔ)言目錄

讀取或者設(shè)置語(yǔ)言。

controller.locale(key)

  • key {String}

根據(jù) language 獲取對(duì)應(yīng)的語(yǔ)言文本。

controller.redirect(url, statusCode)

  • url {String} 要跳轉(zhuǎn)的 url
  • statusCode {Number} 狀態(tài)碼,默認(rèn)為 302

頁(yè)面跳轉(zhuǎn)。

controller.assign(name, value)

  • name {String | Object} 變量名
  • value {Mixed} 變量值

將變量賦值到模版中。

export default class extends think.controller.base {
  indexAction(){
    //單個(gè)賦值
    this.assign("title", "thinkjs");
    //批量賦值
    this.assign({
      name: "xxx",
      desc: "yyy"
    })
  }
}

controller.fetch(templateFile)

  • templateFile {String} 模版文件地址
  • return {Promise}

獲取解析后的模版內(nèi)容。

直接獲取
// 假設(shè)文件路徑為 /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
  * indexAction(){
    // home/index_index.html
    let content = yield this.fetch();
  }
}
改變 action
// 假設(shè)文件路徑為 /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
  * indexAction(){
    // home/index_detail.html
    let content = yield this.fetch("detail");
  }
}
改變 controller 和 action
// 假設(shè)文件路徑為 /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
  * indexAction(){
    // home/user_detail.html
    let content = yield this.fetch("user/detail");
  }
}
改變 module, controller 和 action
// 假設(shè)文件路徑為 /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
  * indexAction(){
    // admin/user_detail.html
    let content = yield this.fetch("admin/user/detail");
  }
}
改變文件后綴名
// 假設(shè)文件路徑為 /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
  * indexAction(){
    // home/index_detail.xml
    let content = yield this.fetch("detail.xml");
  }
}
獲取絕對(duì)路徑文件
// 假設(shè)文件路徑為 /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
  * indexAction(){
    // /home/xxx/aaa/bbb/c.html
    let content = yield this.fetch("/home/xxx/aaa/bbb/c.html");
  }
}

controller.display(templateFile)

  • templateFile {String} 模版文件路徑

輸出模版內(nèi)容到瀏覽器端。查找模版文件策略和controller.fetch相同。

controller.jsonp(data)

  • data {Mixed} 要輸出的內(nèi)容

jsonp 的方法輸出內(nèi)容,獲取 callback 名稱安全過濾后輸出。

export default class extends think.controller.base {
  indexAction(){
    this.jsonp({name: "thinkjs"});
    //writes
    "callback_fn_name({name: "thinkjs"})"
  }
}

controller.json(data)

  • data {Mixed} 要輸出的內(nèi)容

json 的方式輸出內(nèi)容。

controller.status(status)

  • status {Number} 狀態(tài)碼,默認(rèn)為 404

設(shè)置狀態(tài)碼。

controller.deny(status)

  • status {String} 狀態(tài)碼,默認(rèn)為 403

拒絕當(dāng)前請(qǐng)求。

controller.write(data, encoding)

  • data {mixed} 要輸出的內(nèi)容
  • encoding {String} 編碼

輸出內(nèi)容

controller.end(data, encoding)

  • data {mixed} 要輸出的內(nèi)容
  • encoding {String} 編碼

輸出內(nèi)容后結(jié)束當(dāng)前請(qǐng)求。

controller.type(type, charset)

  • type {String} Content-Type
  • charset {Boolean} 是否自動(dòng)追加 charset

設(shè)置 Content-Type。

controller.download(filePath, contentType, fileName)

  • filePath {String} 下載文件的具體路徑
  • content-Type {String} Content-Type
  • fileName {String} 報(bào)錯(cuò)的文件名

下載文件。

export default class extends think.controller.base {
  indexAction(){
    let filePath = think.RESOUCE_PATH + "/a.txt";
    //自動(dòng)識(shí)別 Content-Type,保存的文件名為 a.txt
    this.download(filePath);
  }
}
export default class extends think.controller.base {
  indexAction(){
    let filePath = think.RESOUCE_PATH + "/a.log";
    //自動(dòng)識(shí)別 Content-Type,保存的文件名為 b.txt
    this.download(filePath, "b.txt");
  }
}
export default class extends think.controller.base {
  indexAction(){
    let filePath = think.RESOUCE_PATH + "/a.log";
    //指定 Content-Type 為 text/html,保存的文件名為 b.txt
    this.download(filePath, "text/html", "b.txt");
  }
}

controller.success(data, message)

  • data {Mixed} 要輸出的數(shù)據(jù)
  • message {String} 追加的message

格式化輸出一個(gè)正常的數(shù)據(jù),一般是操作成功后輸出。

http.success({name: "thinkjs"});
//writes
{
  errno: 0,
  errmsg: "",
  data: {
    name: "thinkjs"
  }
}

這樣客戶端就可以根據(jù)errno是否為0為判斷當(dāng)前請(qǐng)求是否正常。

controller.fail(errno, errmsg, data)

  • errno {Number} 錯(cuò)誤號(hào)
  • errmsg {String} 錯(cuò)誤信息
  • data {Mixed} 額外的數(shù)據(jù)

格式化輸出一個(gè)異常的數(shù)據(jù),一般是操作失敗后輸出。

:字段名errnoerrmsg可以在配置里進(jìn)行修改。

http.fail(100, "fail")
//writes
{
  errno: 100,
  errmsg: "fail",
  data: ""
}

這樣客戶端就可以拿到具體的錯(cuò)誤號(hào)和錯(cuò)誤信息,然后根據(jù)需要顯示了。

:字段名errnoerrmsg可以在配置里進(jìn)行修改。

controller.sendTime(name)

  • name {String} header key

發(fā)送請(qǐng)求的執(zhí)行時(shí)間,使用 header 的方式發(fā)出。

文檔地址:https://github.com/75team/www.thinkjs.org/tree/master/view/zh-CN/doc/2.0/api_controller.md

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)