【问题标题】:Reusing a SerialPort object in NodeJS在 NodeJS 中重用 SerialPort 对象
【发布时间】:2021-05-04 01:33:14
【问题描述】:

我正在使用节点 js 串口包 (https://serialport.io/docs/)。

我创建了以下串口对象:

var port = new SerialPort(data.device.hostPort, {
                baudRate: 115200, 
                autoOpen: false,
                }
           );

我将此对象保存在 json 文件中,以便以后可以重用它。 但是,在检索到 json 文件中的数据并对其进行解析后,我无法使用串行端口对象方法,我尝试使用:

port.open(function(err){
    if(err){
        return console.log('Error opening port: ', err.message);
    }
});

但我收到一条错误消息,提示无法识别 open 方法。 有人可以帮我解决这个问题吗? 提前致谢!

【问题讨论】:

    标签: node.js node-serialport


    【解决方案1】:

    我认为您的问题的根源在于您在学习走路之前尝试跑步。你认为你理解了一些东西(比如 JSON 和类)并试图继续前进;但很明显,你缺乏一些基础知识,导致你理解错误,因为你是从缺乏基础开始的。

    1. 了解有关 JavaScript 上 objects 的基础知识。

    2. 了解什么是JSON。它是 JavaScript 的子集,只包含一些原始数据。

    3. 了解 JavaScript 上的 classesfunctions、原型和 closures

    4. 了解serialization

    然后我认为,您可能会理解为什么您尝试做的事情不可能像您尝试做的那样。更重要的是,通常物理资源在没有唯一标识符的情况下是无法序列化的。

    另一方面,您没有说明您无法解决的问题是什么,而是您尝试了什么以及您得到的结果。这只是问题的一半。

    如果你只是想以同样的方式连接到“相同”的端口,你只需要存储信息来重建它和一些功能来做到这一点:可能你需要:

    • 端口名称(唯一标识符!!):data.device.hostPort
    • 配置:{baudRate: 115200, autoOpen: false}

    另外,你必须考虑到:

    • 也许您需要存储其他信息,与您的问题域的具体情况更相关。
    • 初始配置后,某些信息可能会发生变化。最好的方法是拥有一个获取 SerialPort、读取相关属性并返回序列化对象的函数。然后创建另一个函数来反转操作,这将调用 SerialPort 构造函数。
    • 如果您正在混合序列化的类,您可能需要某种方式来指示该类。此外,如果您不小心发送了另一个对象,您可以检测到它并抛出更有用的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 2016-12-09
      相关资源
      最近更新 更多