javascript - 这是通过 websocket 解析传入 JSON 并根据消息类型进行响应的正确方法吗?

标签 javascript node.js json

因此,我使用 OCPP 1.6 JSON 通过 websocket 从充电点接收 JSON。 我正在尝试使用 Node.js 解析消息并根据消息内容做出适当响应

这是我收到的消息:

[ 2,
  'bc7MRxWrWFnfQzepuhKSsevqXEqheQSqMcu3',
  'BootNotification',
  { chargePointVendor: 'AVT-Company',
    chargePointModel: 'AVT-Express',
    chargePointSerialNumber: 'avt.001.13.1',
    chargeBoxSerialNumber: 'avt.001.13.1.01',
    firmwareVersion: '0.9.87',
    iccid: '',
    imsi: '',
    meterType: 'AVT NQC-ACDC',
    meterSerialNumber: 'avt.001.13.1.01' } ]

在本例中,它是“BootNotification”消息,我需要用“Accepted”消息对其进行响应。

这是我的代码:

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {

    //Make incoming JSON into javascript object
    var msg = JSON.parse(message)

    // Print whole message to console
    console.log(msg)

    // Print only message type to console. For example BootNotification, Heartbeat etc...
   console.log("Message type: " + msg[2])

    // Send response depending on what the message type is
    if (msg[2] === "BootNotification") {
      //Send correct response

    } // Add all the message types

  });


});

这样我就可以将消息类型作为字符串打印到控制台:

Message type: BootNotification

所以我的问题是这是获取消息类型的正确方法吗? 我对此很陌生,所以我想确定一下。

OCPP 1.6 JSON 规范可在此处获取:OpenChargeAlliance website

最佳答案

我想是的。 JSON.parse 是内置的,用于解析 JSON 字符串。如果出现问题,它会抛出错误,因此您可以尝试/捕获这个。

由于您得到的响应是一个数组,因此没有其他方法可以使用数字索引访问其项目。

<小时/>

在这种情况下,我个人更喜欢这样的东西:

const handlers = {
  'BootNotification': request => { 'msg': 'what a request' }
};

你可以:

let respone = {'msg': 'Cannot handle this'}

if (handlers.hasOwnProperty(msg[2])) {
  response = handlers[msg[2]](msg);

}

但这就是我要走的路。

关于javascript - 这是通过 websocket 解析传入 JSON 并根据消息类型进行响应的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55177493/

相关文章:

javascript - 如何将此 Javascript 变量转换为有效的 JSON?

javascript - 将 Bson 转换为 Json 对象

javascript - 从将一个 div 加载到另一个 div 的下拉列表中进行选择(IE8、Chrome)

javascript - 当指定为对象属性时,IIFE 如何影响其中的此关键字

javascript - 为什么这个 Firebase Function Promise 没有返回正确的错误?

javascript - 使用 NodeJs 和 MongoDB 存储事件的最佳实践是什么

javascript - 在数组中查找对象而不是循环的更好方法?

javascript - 使用在不同页面上单击的链接更改表单选择字段

javascript - 可以读取没有内容类型的数据吗?

android - 改造:使用 json 进行多部分