JavaScript或nodejs使用混合类Minix继承模式常见的错误:TypeError: MixinNodeBaseContractCRUD is not a function

错误类型提示:

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 };

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值