侦听器参数必须是函数错误

时间:2018-08-13 01:15:16

标签: javascript node.js firmata

enter image description here我正在为挂在树莓派上的rfid使用nodejs。我想做的是,当我点击ID“ 6f124628”时,除非arduino上的另一个引脚处于高电平,否则LED不会打开。我正在使用Firmata协议进行arduino通信。

JS:

function arduinoReady(err) {
  if (err) {
    console.log(err);
    return;
  }
  console.log('Firmware: ' + board.firmware.name +
    '-' + board.firmware.version.major +
    '.' + board.firmware.version.minor);

  var ledOn = true;
  board.pinMode(ledPin, board.MODES.OUTPUT);

  rc522(function(rfidSerialNumber) {

    console.log(rfidSerialNumber);
    if (rfidSerialNumber == "216264a9") {

      onjie.writeSync(1);

    }

    data = board.digitalRead(ledPin);
    if (rfidSerialNumber == "6f124628" && data == "board.HIGH") {

      LED1.writeSync(1);

      return;
    }
  });

但是我的代码不起作用和Typerror:

  

“侦听器”参数必须是一个函数

var http = require('http').createServer(handler);
app.listen(8080);

function handler (req, res) {
  fs.readFile(__dirname + '/firmata.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading firmata.html');
    }
 
    res.writeHead(200);
    res.end(data);
  });
}

1 个答案:

答案 0 :(得分:0)

问题出在方法createServer

您必须更改方法handler

的初始化

尝试将handler声明更改为此:

var handler = function(req, res) {
  fs.readFile(__dirname + '/firmata.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading firmata.html');
    }

    res.writeHead(200);
    res.end(data);
  });
}  

现在,您可以使用以下命令声明服务器了:

var http = require('http').createServer(handler);