Search code examples
javascriptnode.jsexpressundefinednode-serialport

How do i use function if i need to define it later?


So, I'm using node.js, express and serialport. What I need to do is to let user pick serial port which listens to, initialize it by using AJAX request and, hopefully, get some data from serial port. But I can't actually initizalize SerialPort object somewhere in the middle of the code, because it starts raining with "is not defined" errors. So, my code should look like this:

//some definitions here...
app.post('/submitPort', (req, res) => {
    tty = new SerialPort(req.body.portpath)
})
tty.on('data', () => {...})

And so on. Even when I'm trying to declare tty earlier in the code, before submitPort, it throws bunch of errors about that it's not defined. And I understand this logic - I haven't initialized that object before, so, how could I do it? But that also didn't work, I mean, I tried to do it like so:

let tty = new SerialPort()
//some logic
app.post('/submitPort', (req, res) => {
     tty = new SerialPort(req.body.portpath)
})

So, I'm lost now. I really need to bind web and serial together, hovewer, it glues pretty hard. What am I supposed to do in order to make it work?


Solution

  • You need lazy init and singleton, then this solution can be used.

    const tty;
    //some definitions here...
    app.post('/submitPort', (req, res) => {
      if(!tty){
        initTTY(req.body.portpath)
      } // not define init
      res.send("DONE")
    })
    function initTTY(port) {
      tty = new SerialPort(port)
      tty.on('data', () => {
        // Do something here
      })
      tty.on('error', () => {
        tty = null; // so that can initialized
      })
    }