在按钮单击事件上运行Node.js文件

时间:2016-03-18 09:46:51

标签: javascript html node.js

在我目前的项目中,我们有一个HTML页面。在HTML页面中,我们有几个按钮,例如我们有温度传感器,湿度传感器,报警等按钮。当我们点击按钮而不是后端时,它将运行相应的Node.js文件,例如当我们点击时温度传感器按钮比它运行的TemperatureSensor.js文件位于同一路径。 HTML页面的代码如下所示: View of HTML page

TemperatureSensor.js的代码如下:

    var mqtt = require('mqtt');     
    var client = mqtt.connect('mqtt://test.mosquitto.org:1883'); 
    var NUM_SAMPLE_FOR_AVG = 5;
    var numSample = 0;      
    var tempCelcius = 0;        
    var currentAvg = 0;     
    client.subscribe('tempMeasurement');
    client.on('message', function(topic, payload) {     
        if (topic.toString() == "tempMeasurement") {
            sensorMeasurement = JSON.parse(payload);
            console.log("tempValue is " + sensorMeasurement.tempValue);
            if (numSample <= NUM_SAMPLE_FOR_AVG) {      
                numSample = numSample + 1;      
                if (sensorMeasurement.unitOfMeasurement == 'F') {       
                    tempCelcius = ((sensorMeasurement.tempValue - 32) * (5 / 9));       
                } else {        
                    tempCelcius = sensorMeasurement.tempValue;      
                }       
                currentAvg = parseFloat(currentAvg) + parseFloat(tempCelcius);      
                if (numSample == NUM_SAMPLE_FOR_AVG) {      
                    currentAvg = currentAvg / NUM_SAMPLE_FOR_AVG;       
                    var avgTemp = {     
                        "tempValue" : parseFloat(currentAvg),       
                        "unitOfMeasurement" : sensorMeasurement.unitOfMeasurement       
                    };      
                    client.publish('roomAvgTempMeasurement', JSON
                            .stringify(avgTemp));       
                    console.log("Publishing Data roomAvgTempMeasurement "); 
                    numSample = 0;  
                    currentAvg = 0;     
                }       
            }
                } 

    }); 

问题是当我们点击浏览器中的TemperatureSensor按钮而不是显示错误时: TemperatureSensor.js:1未捕获的ReferenceError:未定义require 。如果TemeperatureSensor的内容是console.log("Hello")而不是在浏览器的控制台中显示Hello。如何提供依赖?如果我们想要运行TemperatureSensor,HumiditySensor等,我们需要在终端中运行这些bcoz,例如,如果我们想运行TemperatureSensor而不是终端,我们必须编写{{1 }}。这需要更多的手动工作,因此为了减少这种努力,我们需要这种类型的HTML页面。如何解决这个问题??

1 个答案:

答案 0 :(得分:2)

您无法在浏览器中运行Node.js代码,它们是完全独立的环境(例如,浏览器没有require功能,因此您收到该错误的原因)。你最好的办法是研究创建某种REST服务(最有可能使用Express,Hapi或Restify),它允许你通过HTTP调用Node.js服务器。

This is a decent introduction to the topic - 它使用MongoDB进行数据持久化,但在制作这样的东西时,这绝不是必需的。在您的情况下,您基本上只需要为Temp和Humidity定义路由,运行代码以获取路由处理程序中的数据,然后将JSON数据发送回响应对象。然后,您就可以使用jQuery(或任意数量的其他库)向这些路由发出AJAX请求。

编辑:在查看MQTT GitHub页面之后,还有另一个选项 - 如果使用Browserify或Webpack等工具捆绑,则可以在浏览器中使用该库。鉴于学习编写和维护REST服务的复杂性,这可能是一个更好的选择。