Node-RED 흐름에서 자작 노드로 이진 데이터를 전달하는 방법

5811 단어 node-redNode.js
Node-RED의 플로우로부터 자작 노드에 바이너리 데이터를 건네줄 때, Uint8Array 를 사용하고 있었습니다.

바이너리 데이터로 상호 작용할 때 Buffer 클래스를 지원합시다. 그러면 흐름과 Node.js에서 바이너리 배열을 교환할 수 있습니다.

문제 사건



Node-RED 흐름에서 Uint8Array 유형의 바이너리 데이터를 생성하여 자체 노드에 전달하려고했지만 제대로 작동하지 않았습니다.

브라우저의 function 노드 내의 코드



이 결과를 자체 노드에 입력합니다.
let data = new Uint8Array([1,2,3,4,5]);
return {payload: data};

자체 제작 노드 내


node.on('input',(msg) => {
  let payload = new Uint8Array([0,1,2,3,4,5]);
   console.log(msg.payload);
   console.log(payload);
});

결과



자작 노드 내에서 두 개의 페이로드를 출력해 보면 다음과 같이됩니다.


Function 노드에서 선언한 Uint8Array는 JSON, 자작 노드 내에서 선언한 Uint8Array는 배열이되어 분명히 다른 것 같습니다 ...

정답



Buffer를 사용할 때의 결과

브라우저의 function 노드 내의 코드


let buffer = new Buffer([0,1,2,3,4,5]);
let uint8array = new Uint8Array([0,1,2,3,4,5]);
return {buffer: buffer, uint8array: uint8array};

자체 제작 노드 내


node.on('input',(msg) => {
    console.log({
      buffer:  (msg.buffer instanceof Buffer),
      uint8array: (msg.uint8array instanceof Uint8Array)
    });
    console.log({binay: msg.binary});
    console.log({uint8array: msg.uint8array});
});

정답 결과



이와 같이 Buffer형을 사용한 분은 성공했습니다.
Node.js의 Uint8Array를 사용할 수 있기 때문에 instanceof에서 형식을 확인하면 올바르게 결정할 수 있음을 알았습니다.

좋은 웹페이지 즐겨찾기