Decimal numbers sent over Serial get split and sent over multiple ticks
As explained in Majenko’s comment, the serial link is not packetized: it
transmits individual bytes and nothing else. If you need to convey a
notion of “data packet”, or “full message”, you will have to devise a
way to signal the message boundaries. This is called message “framing”.

Your Arduino is sending ASCII data. In this case, the most common way to
frame messages is linewise: each message is a single line, and each line
is terminated by an “end of line” sequence. The standard end of line
sequences are CR (carriage return, i.e. 0x0d or '\r'), LF (line
feed, i.e. 0x0a or '\n'), and the pair CRLF (CR followed by LF, or
"\r\n").

Actually you are already doing that: you are using Serial.println(),
and this method automatically appends CRLF at the end of whatever it
prints. So now you just have to parse that at the other end: you put
all the incoming characters into a buffer until you see that incoming
CRLF. Then you know you have a full line, which you can report as an
entire message.

This procedure is very common and there is a standard Node.js module for
it. It once was part of the serialport module, but it seems to have
split into a separate module. It is called parser-readline, and you
would use it like this:

const Readline = require("parser-readline"),
      parser = comport.pipe(new Readline({ delimiter: "\r\n" }));

parser.on("data", data =&gt; console.log(data.toString()));


C.f. the documentation of
ReadLineParser.