MQTT 통신 때문에 생긴 문제였다. MQTT는 message 통신 즉 문자열을 넘기기 때문에 여러개의 데이터를 보낼 수가 없다. 그렇기 때문에 데이터를 구분하려고 문자열에 특수문자로 구분하였다. 

그런데 HASH화를 한 데이터는 구분하려고 넣은 특수문자가 포함되는 일이 생겼다. 우선 데이터를 구분하여 배열로 넣었다. 구분 특수문자로는 '/' 를 사용하였다. 의문은 HASH 알고리즘에서 다른 특수문자는 안생기나? 라는 의문이다. 그런데 한편으론 뭐가 됐던 만들어 놓으면 어떤 문자든 상관이 없겠다는 생각이 들어서 만들었다.

client.on('message', async function (topic, message) {
    var _message = message.toString().split('/');

 

그 후 HASH 데이터는 배열의 끝 번째에 배치를 했기 때문에 특수문자가 없다면 4번째에 배치된다고 가정하면 4번째부터 배열의 끝까지 합치는 개념이었다. 그래서 급하게 N번째부터 끝까지 합치는 함수를 만들었다.

 

함수의 파라미터는 해당 배열과 HASH 데이터의 배열의 위치를 보내주면 된다. 위에서 말했던 것처럼 HASH 데이터가 배열의 4번째의 위치해있다면 4를 넘겨주면된다.

async function _combineData(data, num) {
    var _data = data[num]

    for (var i = num + 1; i <= data.length - 1; i++) {
        _data += '/' + data[i]
    }
    return _data
}

우선 구분할 때 split 함수를 사용했기 때문에 특수문자가 빠진다. 그렇기 때문에 합칠 경우 특수문자가 없으므로 주의해야한다. 그렇기 때문에 데이터를 합칠 때에는 특수문자를 같이 넣어줘야한다. 그리고 끝까지가 아니라 N번째에서 M번째까지 합치려고 하면 for문 조건식에 i<= M 으로 변경해주면 된다.

+ Recent posts