think.base
is the base class, all classes will inherit it, it supports some basic functions.
Inherit Base Class with ES6:
export default class extends think.base {
/**
* init method
* @return {} []
*/
init(){
}
}
Notice
: while using ES6, don't write the constructor
, instead puting some initial operations in the function init
, this function will be called automatically when class instancing, the effect is equivalent to use construtor
.
Inherit Base Class Use Normal Way:
module.exports = think.Class(think.base, {
/**
* init method
* @return {} []
*/
init: function(){
}
})
args
{Array}Initialization function, which can do some assign and other operations.
class a extends think.base {
init(name, value){
this.name = name;
this.value = value;
}
}
Notice
:Different from version 1.x
, the init
function of 2.x
did not return a Promise
, some common operations are in __before
magic functions.
Pre-magic function, you can put some common behavior here, such as check wheter user is login or not in controller.
export default class think.controller.base {
/**
* pre-magic function
* @return {Promise} []
*/
async __before(){
let userInfo = await this.session('userInfo');
// if not login yet, it will jump to login page.
if(think.isEmpty(userInfo)){
return this.redirect('/logic');
}
this.assign('userInfo', userInfo)
}
}
Post-magic function, it will execute after function executed.
return
{String} return the current class file's name.Get the current class file's name, not contains detail of file path or file's extension.
// suppose current class file path is /home/xxx/project/app/controller/user.js
class a extends think.base {
test(){
var filename = this.filename();
//returns 'user'
}
}
method
{String} the function name to been invokeddata
{Array} argumentsreturn
{Promise}To invoke a function, automatically invoke __before
and __after
no matter whether the function return Pormise
or not, this function will return Pormise
.
This function supports */yield
and async/await
.
//use async/await
class Cls extends think.base {
async getValue(){
let value = await this.getValue();
return value;
}
}
let instance = new Cls();
instance.invoke('getValue').then(data => {
});
//use */yield
class Cls extends think.base {
* getValue(){
let value = yield this.getValue();
return value;
}
}
let instance = new Cls();
instance.invoke('getValue').then(data => {
});