2014-11-21 20 views
0

我使用Node.js和Johnny-Five以及Arduino Uno微控制器。我的目标是在按下连接到Arduino的按钮时,网页将显示一个条形的按下次数。Node.js和Johnny-Five“文档未定义”错误

在控制台我得到一个错误,当我按下,说:“文件没有定义”,并引用我的变量是应该改变CSS样式的按钮:

var bar1 = document.getElementById('bar1'); 

不知道这是为什么给人一种错误。有什么想法吗?以下是我的javascript:

var five = require("johnny-five"), 
    bumper, led, counter, toggleState; 
    toggleState = false; 

five.Board().on("ready", function() { 

    bumper = new five.Button(7); 
    led = new five.Led(13); 
    counter = 200; 

    bumper.on("hit", function() { 

    led.on(); 
    console.log("Button has been pressed"); 
      counter += 10; //add 10 everytime the button is pressed 

      console.log(counter); 
      toggleState = true; 
      console.log("on"); 

    //function increaseBarSize() { 
    if(toggleState == true) { 
     var bar1 = document.getElementById('bar1'); 
     bar1.style.width = counter; 
     console.log(bar1); 
    } 

    }).on("release", function() { 
     led.off(); 
     console.log("off"); 

    }); 

    }); 
+1

你想在nodejs文件里面运行DOM代码吗? DOM代码需要在网页(在浏览器中)的脚本标记中运行,而不是在nodejs程序中运行。看起来,也许你不太了解前端代码和后端代码之间的区别。 – jfriend00 2014-11-21 04:37:48

+0

我对JavaScript和编程一般都比较陌生 - 刚开始几个月前,所以它是学习过程的一部分。操纵基于Arduino传感器输入的DOM是不可能完成的任务吗?我已收到另一个建议,以使用Socket.io来实现此功能。这是可行的吗? – deevolution 2014-11-22 04:46:57

+0

你需要了解的第一件事是一个网页有一个前端部分,它是在浏览器中运行的HTML和javascript以及在你的服务器上运行的后端部分(我假设它是nodejs,可能正在运行在你的Arduino设备上)。这些是在不同地方运行的两个完全独立的代码片段。服务器创建一个传送到浏览器的网页,然后网页在浏览器中运行。 DOM仅在浏览器中使用。您不要在nodejs或Arduino中操作DOM。您只能从网页中的JavaScript处理DOM。 – jfriend00 2014-11-22 05:57:47

回答

1

这是因为在服务器端没有DOM,您需要发送此值并在客户端管理DOM。

试试这个:

服务器端

var express = require('express'); 
var app = express(); 
var http = require('http').Server(app); 
var io = require('socket.io').listen(http); 
var five = require("johnny-five"), 
bumper, led, counter, toggleState; 
toggleState = false; 
five.Board().on("ready", function() { 

    bumper = new five.Button(7); 
    led = new five.Led(13); 
    counter = 200; 

    bumper.on("hit", function() { 

     led.on(); 
     console.log("Button has been pressed"); 
     counter += 10; //add 10 everytime the button is pressed 

     console.log(counter); 
     toggleState = true; 
     console.log("on"); 

     //function increaseBarSize() { 
     if(toggleState == true) { 
      io.on('connection', function(socket){ 
       socket.emit('counter', counter); 
      }); 
     } 

    }).on("release", function() { 
     led.off(); 
     console.log("off"); 

    }); 
}); 
app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/<client page>.html'); //change <client page> to the client document 
}); 
http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 

客户端

​​

注意:假设你已经安装了Socket.io并且表达了模块。