错误类型提示:
module.exports = class AssetTradeWithdrawal extends MixinNodeBaseContractCRUD(AssetTradeWithdrawalContract) {
TypeError: MixinNodeBaseContractCRUD is not a function
其实这个错误非常简单,只是经常出现,所以记录一下!
【错误原因:导出的时候没有导出一个对象,所以提示is not a function】
错误导出方式:
错误导出方式【错误提示:TypeError: MixinNodeBaseContractCRUD is not a function】
const MixinNodeBaseContractCRUD = require("../common/MixinNodeBaseContractCRUD.js");
正确导出方式 :
正确导出方式
const { MixinNodeBaseContractCRUD } = require("../common/MixinNodeBaseContractCRUD.js");
MixinNodeBaseContractCRUD类如下:
const serverConfig = require("../../config/server_config.js");
const OwnAxios = require("../../lib/OwnAxios.js");
// 创建一个Mixin混合多继承模式的类【继承的类是一个变量】
const MixinNodeBaseContractCRUD = (SuperContractClass = null) => {
// 既然使用了extends继承,SuperClass必须是一个类,否则会报错【无继承类就继承一个空类即可】
// 如果不传入SuperClass,那么继承MixinViewBaseCRUD必须是MixinViewBaseCRUD()【是一个类方法】
SuperContractClass = SuperContractClass || class Empty {
};
const NodeBaseContractCRUD = class extends SuperContractClass {
constructor (mnemonic = null) {
super(mnemonic);
this.mnemonic = mnemonic;
}
// 所以的module层调用数据库的CRUD操作的公共方法
async nodeRequestServerHandleCRUD (crudUrl, formData = null, method = "POST", successFunc = null, failFunc = null) {
return OwnAxios.axiosRequest(crudUrl, await this.__getRequireFormData(formData), method, successFunc, failFunc);
}
// 【非常重要,有些地方是省略没传的】传入的formData如何没有address的话这里会自动添加
async __getRequireFormData (mnemonic, formData = null) {
// null或underfined都是没有属性的,这里必须赋值给空对象
!formData ? formData = {} : null;
!formData.hasOwnProperty("address") ? formData.address = this.active_wallet.address : null;
// 每次请求都会携带请求数据库加密的signatureToken【服务器端接收参数的字段为token】
!formData.hasOwnProperty("signatureToken") ? formData.signatureToken = await this.__getsignatureToken() : null;
return formData;
}
// 从数据库获取signatureToken
async __getsignatureToken () {
return OwnAxios.axiosRequest(serverConfig.common.get_token, {
mnemonic: this.mnemonic,
});
}
};
return NodeBaseContractCRUD;
};
// 在外部直接使用ViewBaseCRUD来创建实例【无继承】
const NodeBaseContractCRUD = MixinNodeBaseContractCRUD();
module.exports = { MixinNodeBaseContractCRUD, NodeBaseContractCRUD };