think.http.base

think.http.base 继承自 think.base 类,该类为含有 http 对象处理时的基类。middleware, controller, view 类都继承自该类。

使用 ES6 语法继承该类
  1. export default class extends think.http.base {
  2. /**
  3. * 初始化方法,实例化时自动被调用,不要写 constructor
  4. * @return {}
  5. */
  6. init(){
  7. }
  8. }
使用普通的方式继承该类
  1. module.exports = think.Class(think.http.base, {
  2. init: function(){
  3. }
  4. });

属性

http

封装的 http 对象,包含的属性和方法请见 API -> http

方法

config(name, value)

  • name {String} 配置名称
  • value {Mixed} 配置值
    读取或者设置配置,value 为 undefined 时为读取配置,否则为设置配置。

该方法不仅可以读取系统预设值的配置,也可以读取项目里定义的配置。

:不可将当前请求的用户信息作为配置来设置,会被其他用户给冲掉。

  1. export default class extends think.controller.base {
  2. indexAction(){
  3. //获取配置值
  4. let value = this.config('name');
  5. }
  6. }

action(controller, action)

  • controller {Object | String} controller实例
  • action {String} action名称
  • return {Promise}
    调用 controller 下的 action,返回一个 Promise。自动调用 beforeafter 魔术方法。

如果 controller 是字符串,则自动去寻找对应的 controller。

  1. //调用当前模块下controller里的action
  2. export default class extends think.controller.base {
  3. async indexAction(){
  4. //调用user controller下的detail方法
  5. let value = await this.action('user', 'detail');
  6. }
  7. }
  1. //跨模块调用controller里的action
  2. export default class extends think.controller.base {
  3. async indexAction(){
  4. //调用admin模块user controller下的detail方法
  5. let value = await this.action('admin/user', 'detail');
  6. }
  7. }

cache(name, value, options)

  • name {String} 缓存名称
  • value {Mixed | Function} 缓存值
  • options {Object} 缓存配置,具体见缓存配置
    读取或者设置缓存,valueundefined 时是读取缓存,否则为设置缓存。默认缓存类型为 file
  1. export default class extends think.controller.base {
  2. async indexAction(){
  3. //获取缓存
  4. let value = await this.cache('name');
  5. }
  6. }

当参数 value 为 function 时,表示获取缓存,如果缓存值不存在,则调用该 function,将返回值设置缓存并返回。这样避免在项目开发时要先判断缓存是否存在,然后再从相关地方读取值然后设置缓存的麻烦。

  1. export default class extends think.controller.base {
  2. async indexAction(){
  3. //获取缓存,缓存不存在时自动调用 function,并设置缓存
  4. let value = await this.cache('name', () => {
  5. return this.model('user').select();
  6. });
  7. }
  8. }

设置缓存并修改缓存类型:

  1. export default class extends think.controller.base {
  2. async indexAction(){
  3. //设置缓存,缓存类型使用redis
  4. await this.cache('name', 'value', {
  5. type: 'redis'
  6. });
  7. }
  8. }

hook(event, data)

  • event {String} 事件名称
  • data {Mixed} 参数
  • return {Promise}
    执行对应的事件,一个事件包含若干个 middleware,会按顺序执行这些 middleware。

事件可以在配置 src/common/config/hook.js 里定义,也可以通过 think.hook 来注册。

  1. export default class extends think.controller.base {
  2. async indexAction(){
  3. let result = await this.hook('parse_data');
  4. }
  5. }

model(name, options)

  • name {String} 模型名称
  • options {Object} 配置,具体见数据库配置
  • return {Object} model实例
    获取模型实例,默认获取当前模块下对应模型的实例,也可以跨模块获取模型的实例。
  1. export default class extends think.controller.base {
  2. indexAction(){
  3. //获取当前模块下的 user model 的实例
  4. let model = this.model('user');
  5. //获取admin模块下 article model 的实例
  6. let model1 = this.model('admin/article');
  7. //获取当前模块下的 test model 的实例,并且是 sqlite 的数据库
  8. let model2 = this.model('test', {
  9. type: 'sqlite' //设置数据库类型为sqlite,更多参数见数据库配置
  10. })
  11. }
  12. }

controller(name)

  • name {String} controller名称
  • return {Object} controller实例
    获取 Controller 的实例,如果 Controller 找不到,则报错。
  1. export default class extends think.controller.base {
  2. indexAction(){
  3. //获取当前模块下 user controller 的实例
  4. let controller = this.controller('user');
  5. //获取admin模块下 user controller 的实例
  6. let controller1 = this.controller('admin/user');
  7. }
  8. }

service(name)

  • name {String} service 名称
  • return {Class}
    获取对应的 service。service 返回的可能是 class ,也可能直接是个对象,所以不会直接实例化。
  1. export default class extends think.controller.base {
  2. indexAction(){
  3. //获取对应的service
  4. let service = this.service('user');
  5. //获取service的实例
  6. let instance = new service(...args);
  7. //获取admin模块下的user service
  8. let service1 = this.service('admin/user');
  9. }
  10. }

原文: https://thinkjs.org/zh-cn/doc/2.0/api_think_http_base.html