Почему читаемые данные с COM порта ломаются при потоке?
В приведённом коде использована функция Serial.print().  То есть код просто пишет в порт два символа - '2' и '2'.
На входе принимаем следующий текст - '22222222222222222222222222222222222222222222222222222'.
В какой-то момент буфер заполняется и происходит чтение с последующим разбором. Сколько при этом символов в буфере - сколько есть, столько и будет передано.
Логичнее было бы использовать какой-нибудь символ-разделитель. Например, перенос строки. Чтобы в буфере было '22\r\n22\r\n22\r\n22\r\n'.
Для этого достаточно использовать функцию Serial.println() вместо Serial.print().
Ну, вроде как, COM - последовательный порт. Это значит, что данные просто бегут по нему. Например, там скопилось 22, пока вы пытались его прочитать, пришло 22, а бывает, что прочитали быстро и успела дойти только одна цифра. Поэтому надо после отправки числа отправлять какой-то разделитель, чтобы потом понимать, где заканчивается предыдущий ответ и начинается новый.
Но если передаете только температуру, то я бы советовал использовать Serial.write(25). Он передаст один байт со значением 25 (0b00011001). В nodejs надо будет его просто распарсить.
Иначе же он приведет число к строке (2 байта: "2" и "5") и будет посылать их раздельно.