【问题标题】:How to load object or module based on variable如何根据变量加载对象或模块
【发布时间】:2017-02-18 05:54:09
【问题描述】:

作为 NodeJS 的新手,我想知道解决以下“问题”的最佳方法是什么。

我的主应用程序接受包括device_typepayload 在内的变量。这个payload 需要解密的方式取决于device_type

为了避免使用大的 case/switch 或 if 子句,并且能够在需要时插入新设备;我正在寻找一种更面向对象的方法。

在 PHP 中,我将为每个设备创建一个类,并使用装饰器从正确的命名空间相应地“加载”它们。每个类都有一个 decrypt() 方法(使用合约强制执行)

如何在 nodejs 中完成相同的结构?

【问题讨论】:

    标签: node.js


    【解决方案1】:

    好吧,正如您自己建议的那样,您可以将它们编写为模块,然后根据您提到的设备类型包含它们。

    假设您已经创建了模块并将它们放在适当的目录中

    var decryptors = {
        device_type_1: 'decryptor_module_1',
        device_type_2: 'decryptor_module_2',
    };
    
    var decryptor = require(decryptors[input.device_type]);
    

    【讨论】:

    • 完全忘记了 require() 所需的模块没有“类”名称。唯一引用名称的是文件名。
    • 此外,您可以通过在设备对象中使用decryptor(或其他)属性来避免映射,该属性将返回必须加载的解密器的名称,甚至是对象本身。
    • 但是你应该首先加载所有可能的设备,然后循环遍历它们以找到正确的“解密器”属性。听起来效率不高,还是我错过了什么?
    • @stUrb 我不了解您的工作流程,我只是在胡乱提出想法。
    • 我愿意将我的工作流程调整为更好的工作流程:) 现在我将坚持使用映射表。有没有一种非致命的方法来检查 require() 是否存在?
    猜你喜欢
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2023-03-24
    • 2021-08-13
    • 2020-10-20
    • 2019-09-18
    • 2018-12-11
    相关资源
    最近更新 更多