[TOC=2,4]
`think.http.base`繼承自?[think.base](https://thinkjs.org/zh-CN/doc/2.0/api_think_base.html)?類,該類為含有 http 對象處理時的基類。middleware, controller, view 類都繼承自該類。
##### 使用 ES6 語法繼承該類
~~~
export default class extends think.http.base {
/**
* 初始化方法,實例化時自動被調用,不要寫 constructor
* @return {}
*/
init(){
}
}
~~~
##### 使用普通的方式繼承該類
~~~
module.exports = think.Class(think.http.base, {
init: function(){
}
});
~~~
### 屬性
#### http
封裝的 http 對象,包含的屬性和方法請見?[API -> http](https://thinkjs.org/zh-CN/doc/2.0/api_http.html)。
### 方法
#### config(name, value)
* `name`?{String} 配置名稱
* `value`?{Mixed} 配置值
讀取或者設置配置,value 為?`undefined`?時為讀取配置,否則為設置配置。
該方法不僅可以讀取系統預設值的配置,也可以讀取項目里定義的配置。
`注`:不可將當前請求的用戶信息作為配置來設置,會被其他用戶給沖掉。
~~~
export default class extends think.controller.base {
indexAction(){
//獲取配置值
let value = this.config("name");
}
}
~~~
#### action(controller, action)
* `controller`?{Object | String} controller實例
* `action`?{String} action名稱
* `return`?{Promise}
調用 controller 下的 action,返回一個 Promise。自動調用`__before`和`__after`魔術方法。
如果 controller 是字符串,則自動去尋找對應的 controller。
~~~
//調用當前模塊下controller里的action
export default class extends think.controller.base {
* indexAction(){
//調用user controller下的detail方法
let value = yield this.action("user", "detail");
}
}
~~~
~~~
//跨模塊調用controller里的action
export default class extends think.controller.base {
* indexAction(){
//調用admin模塊user controller下的detail方法
let value = yield this.action("admin/user", "detail");
}
}
~~~
#### cache(name, value, options)
* `name`?{String} 緩存名稱
* `value`?{Mixed | Function} 緩存值
* `options`?{Object} 緩存配置,具體見緩存配置
讀取或者設置緩存,`value`為`undefined`時是讀取緩存,否則為設置緩存。默認緩存類型為`file`。
~~~
export default class extends think.controller.base {
* indexAction(){
//獲取緩存
let value = yield this.cache("name");
}
}
~~~
當參數`value`為 function 時,表示獲取緩存,如果緩存值不存在,則調用該 function,將返回值設置緩存并返回。這樣避免在項目開發時要先判斷緩存是否存在,然后再從相關地方讀取值然后設置緩存的麻煩。
~~~
export default class extends think.controller.base {
* indexAction(){
//獲取緩存,緩存不存在時自動調用 function,并設置緩存
let value = yield this.cache("name", () => {
return this.model("user").select();
});
}
}
~~~
設置緩存并修改緩存類型:
~~~
export default class extends think.controller.base {
* indexAction(){
//設置緩存,緩存類型使用redis
yield this.cache("name", "value", {
type: "redis"
});
}
}
~~~
#### hook(event, data)
* `event`?{String} 事件名稱
* `data`?{Mixed} 參數
* `return`?{Promise}
執行對應的事件,一個事件包含若干個 middleware,會按順序執行這些 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} 配置,具體見數據庫配置
* `return`?{Object} model實例
獲取模型實例,默認獲取當前模塊下對應模型的實例,也可以跨模塊獲取模型的實例。
~~~
export default class extends think.controller.base {
indexAction(){
//獲取當前模塊下的 user model 的實例
let model = this.model("user");
//獲取admin模塊下 article model 的實例
let model1 = this.model("admin/article");
//獲取當前模塊下的 test model 的實例,并且是 sqlite 的數據庫
let model2 = this.model("test", {
type: "sqlite" //設置數據庫類型為sqlite,更多參數見數據庫配置
})
}
}
~~~
#### controller(name)
* `name`?{String} controller名稱
* `return`?{Object} controller實例
獲取 Controller 的實例,如果 Controller 找不到,則報錯。
~~~
export default class extends think.controller.base {
indexAction(){
//獲取當前模塊下 user controller 的實例
let controller = this.controller("user");
//獲取admin模塊下 user controller 的實例
let controller1 = this.controller("admin/user");
}
}
~~~
#### service(name)
* `name`?{String} service 名稱
* `return`?{Class}
獲取對應的 service。service 返回的可能是 class ,也可能直接是個對象,所以不會直接實例化。
~~~
export default class extends think.controller.base {
indexAction(){
//獲取對應的service
let service = this.service("user");
//獲取service的實例
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](https://github.com/75team/www.thinkjs.org/tree/master/view/zh-CN/doc/2.0/api_think_http_base.md)
- 快速入門
- 介紹
- 創建項目
- 項目結構
- 代碼規范
- 升級指南
- 進階應用
- 模塊
- 控制器
- 視圖
- 配置
- 路由
- 模型
- 介紹
- 事務
- 關聯模型
- Mysql
- MongoDB
- SQLite
- Adapter
- 介紹
- Cache
- Session
- WebSocket
- Template
- 擴展功能
- thinkjs 命令
- 靜態資源訪問
- Middleware
- Service
- Cookie
- 錯誤處理
- 錯誤信息
- 數據校驗
- 國際化
- 路徑常量
- REST API
- 定時任務
- 線上部署
- 推薦模塊
- API
- think
- think.base
- think.http.base
- http
- controller
- rest controller
- model
- model.mongo
- middleware