Javascript NodeJS事件循环&侦听事件

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

我有一个门传感器连接到一个树莓圆周率。要检查门是否已打开,以下脚本每隔2秒运行一次。如果已打开,将向外部API服务器发出POST请求

这非常有效,但目标是发出POST请求,其中包含门打开的时间和时间的信息。我的第一个想法是使用Node Events和EventEmitter功能,但我不确定这一功能的实现

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;}时,它就可以工作了,这防止了每次代码循环时它都被重置