think.base

think.base是基类,所有的类都会继承该类,该类提供了一些基本的方法。

使用 ES6 语法继承该类:

  1. export default class extends think.base {
  2. /**
  3. * init method
  4. * @return {} []
  5. */
  6. init(){
  7. }
  8. }

: 使用 ES6 里的类时不要写 constructor,把初始化的一些操作放在 init方法里,该方法在类实例化时自动被调用,效果等同于 constructor

使用普通的方式继承该类:

  1. module.exports = think.Class(think.base, {
  2. /**
  3. * init method
  4. * @return {} []
  5. */
  6. init: function(){
  7. }
  8. })

init(…args)

  • args {Array}
    初始化方法,这里可以进行一些赋值等操作。
  1. class a extends think.base {
  2. init(name, value){
  3. this.name = name;
  4. this.value = value;
  5. }
  6. }

:与 1.x 版本不同的是,2.x 版本 init 方法不再支持返回一个 Promise,一些通用操作放在 __before 魔术方法里进行。

__before()

前置魔术方法,可以将一些通用的行为放在这里进行,如:controller 里检测用户是否登录

  1. export default class think.controller.base {
  2. /**
  3. * 前置魔术方法
  4. * @return {Promise} []
  5. */
  6. * __before(){
  7. let userInfo = yield this.session('userInfo');
  8. //如果没有登录,则跳转到登录页面
  9. if(think.isEmpty(userInfo)){
  10. return this.redirect('/logic');
  11. }
  12. this.assign('userInfo', userInfo)
  13. }
  14. }

__after()

后置魔术方法,在方法执行完成后在执行。

filename()

  • return {String} 返回当前类文件的名称
    获取当前类文件的名称,不包含文件具体路径和扩展名。
  1. //假设当前类文件具体路径为 /home/xxx/project/app/controller/user.js
  2. class a extends think.base {
  3. test(){
  4. var filename = this.filename();
  5. //returns 'user'
  6. }
  7. }

invoke(method, …data)

  • method {String} 要调用的方法名称
  • data {Array} 传递的参数
  • return {Promise}
    调用一个方法,自动调用 beforeafter 魔术方法。不管方法本身是否返回 Promise,该方法始终返回 Promise

方法本身支持是 */yieldasync/await

  1. //使用 async/await
  2. class Cls extends think.base {
  3. async getValue(){
  4. let value = await this.getValue();
  5. return value;
  6. }
  7. }
  8. let instance = new Cls();
  9. instance.invoke('getValue').then(data => {
  10. });
  1. //使用 */yield
  2. class Cls extends think.base {
  3. * getValue(){
  4. let value = yield this.getValue();
  5. return value;
  6. }
  7. }
  8. let instance = new Cls();
  9. instance.invoke('getValue').then(data => {
  10. });

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