Javascript NodeJS事件循环&侦听事件
我有一个门传感器连接到一个树莓圆周率。要检查门是否已打开,以下脚本每隔2秒运行一次。如果已打开,将向外部API服务器发出POST请求 这非常有效,但目标是发出POST请求,其中包含门打开的时间和时间的信息。我的第一个想法是使用Node Events和EventEmitter功能,但我不确定这一功能的实现Javascript NodeJS事件循环&侦听事件,javascript,node.js,events,Javascript,Node.js,Events,我有一个门传感器连接到一个树莓圆周率。要检查门是否已打开,以下脚本每隔2秒运行一次。如果已打开,将向外部API服务器发出POST请求 这非常有效,但目标是发出POST请求,其中包含门打开的时间和时间的信息。我的第一个想法是使用Node Events和EventEmitter功能,但我不确定这一功能的实现 var rest = require('restler'); var gpio = require('pi-gpio'); setInterval(function(){ gpio.rea
var rest = require('restler');
var gpio = require('pi-gpio');
setInterval(function(){
gpio.read(16, function(err, value) { // sensor is attached to pin 16
if(err) throw err;
if(value === 1){ // If closed, the value is 0
console.log("Door Opened");
rest.post('http://192.168.6.109:3000/door/save', {
data: {
door: 'Open'
}
}).on('complete', function(data, response){
console.log('door status code: ' + response.statusCode);
});
}
});
},2000);
您需要两件事:时间戳和打开和关闭事件之间的经过时间。然后您可以将信息发送到服务器。类似这样的方法可能会奏效:
var rest = require('restler');
var gpio = require('pi-gpio');
var open;
setInterval(function(){
gpio.read(16, function(err, value) { // sensor is attached to pin
if(err) throw err;
if(value == '1'){ // If closed, the value is '0'
console.log("Door Opened");
open = Date.now ();
}else{
//"0" is assumed
console.log("Door Closed");
//Check whether the door was opened
if (open){
var elapsed = Date.now () - open;
rest.post('http://192.168.6.109:3000/door/save', {
data: {
door: 'Open',
openTime: open,
elapsedTime: elapsed
}
}).on('complete', function(data, response){
console.log('door status code: ' + response.statusCode);
});
open = null;
}
}
});
},2000);
但我担心过去的时间总是2000的倍数。尽量缩短间隔时间。只需保存所需内容并发送即可?或者在服务器上记录更改?抱歉,你说的“保存你需要的”是什么意思?当我在open变量的实例化中包含iftypeof open=='undefined'{open=Date.now;}时,它就可以工作了,这防止了每次代码循环时它都被重置