think.http.base(ThinkJS http基類)

2021-09-17 14:28 更新

think.http.base繼承自 think.base 類,該類為含有 http 對象處理時的基類。middleware, controller, view 類都繼承自該類。

使用 ES6 語法繼承該類
export default class extends think.http.base {
  /**
   * 初始化方法,實(shí)例化時自動被調(diào)用,不要寫 constructor
   * @return {} 
   */
  init(){

  }
}
使用普通的方式繼承該類
module.exports = think.Class(think.http.base, {
  init: function(){

  }
});

屬性

http

封裝的 http 對象,包含的屬性和方法請見 API -> http

方法

config(name, value)

  • name {String} 配置名稱
  • value {Mixed} 配置值

讀取或者設(shè)置配置,value 為 undefined 時為讀取配置,否則為設(shè)置配置。

該方法不僅可以讀取系統(tǒng)預(yù)設(shè)值的配置,也可以讀取項(xiàng)目里定義的配置。

:不可將當(dāng)前請求的用戶信息作為配置來設(shè)置,會被其他用戶給沖掉。

export default class extends think.controller.base {
  indexAction(){
    //獲取配置值
    let value = this.config("name");
  }
}

action(controller, action)

  • controller {Object | String} controller實(shí)例
  • action {String} action名稱
  • return {Promise}

調(diào)用 controller 下的 action,返回一個 Promise。自動調(diào)用__before__after魔術(shù)方法。

如果 controller 是字符串,則自動去尋找對應(yīng)的 controller。

//調(diào)用當(dāng)前模塊下controller里的action
export default class extends think.controller.base {
  * indexAction(){
    //調(diào)用user controller下的detail方法
    let value = yield this.action("user", "detail");
  }
}
//跨模塊調(diào)用controller里的action
export default class extends think.controller.base {
  * indexAction(){
    //調(diào)用admin模塊user controller下的detail方法
    let value = yield this.action("admin/user", "detail");
  }
}

cache(name, value, options)

  • name {String} 緩存名稱
  • value {Mixed | Function} 緩存值
  • options {Object} 緩存配置,具體見緩存配置

讀取或者設(shè)置緩存,valueundefined時是讀取緩存,否則為設(shè)置緩存。默認(rèn)緩存類型為file

export default class extends think.controller.base {
  * indexAction(){
    //獲取緩存
    let value = yield this.cache("name");
  }
}

當(dāng)參數(shù)value為 function 時,表示獲取緩存,如果緩存值不存在,則調(diào)用該 function,將返回值設(shè)置緩存并返回。這樣避免在項(xiàng)目開發(fā)時要先判斷緩存是否存在,然后再從相關(guān)地方讀取值然后設(shè)置緩存的麻煩。

export default class extends think.controller.base {
  * indexAction(){
    //獲取緩存,緩存不存在時自動調(diào)用 function,并設(shè)置緩存
    let value = yield this.cache("name", () => {
      return this.model("user").select();
    });
  }
}

設(shè)置緩存并修改緩存類型:

export default class extends think.controller.base {
  * indexAction(){
    //設(shè)置緩存,緩存類型使用redis
    yield this.cache("name", "value", {
      type: "redis"
    });
  }
}

hook(event, data)

  • event {String} 事件名稱
  • data {Mixed} 參數(shù)
  • return {Promise}

執(zhí)行對應(yīng)的事件,一個事件包含若干個 middleware,會按順序執(zhí)行這些 middleware。

事件可以在配置config/hook.js里定義,也可以通過 think.hook 來注冊。

export default class extends think.controller.base {
  * indexAction(){
    let result = yield this.hook("parse_data");
  }
}

model(name, options)

  • name {String} 模型名稱
  • options {Object} 配置,具體見數(shù)據(jù)庫配置
  • return {Object} model實(shí)例

獲取模型實(shí)例,默認(rèn)獲取當(dāng)前模塊下對應(yīng)模型的實(shí)例,也可以跨模塊獲取模型的實(shí)例。

export default class extends think.controller.base {
  indexAction(){
    //獲取當(dāng)前模塊下的 user model 的實(shí)例
    let model = this.model("user");
    //獲取admin模塊下 article model 的實(shí)例
    let model1 = this.model("admin/article");
    //獲取當(dāng)前模塊下的 test model 的實(shí)例,并且是 sqlite 的數(shù)據(jù)庫
    let model2 = this.model("test", {
      type: "sqlite" //設(shè)置數(shù)據(jù)庫類型為sqlite,更多參數(shù)見數(shù)據(jù)庫配置
    })
  }
}

controller(name)

  • name {String} controller名稱
  • return {Object} controller實(shí)例

獲取 Controller 的實(shí)例,如果 Controller 找不到,則報(bào)錯。

export default class extends think.controller.base {
  indexAction(){
    //獲取當(dāng)前模塊下 user controller 的實(shí)例
    let controller = this.controller("user");
    //獲取admin模塊下 user controller 的實(shí)例
    let controller1 = this.controller("admin/user");
  }
}

service(name)

  • name {String} service 名稱
  • return {Class}

獲取對應(yīng)的 service。service 返回的可能是 class ,也可能直接是個對象,所以不會直接實(shí)例化。

export default class extends think.controller.base {
  indexAction(){
    //獲取對應(yīng)的service
    let service = this.service("user");
    //獲取service的實(shí)例
    let instance = new service(...args);
    //獲取admin模塊下的user service
    let service1 = this.service("admin/user");
  }
}

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號