2017-08-22 15 views
0

sensor.reading == null文を置き換えます。以前のタイムスタンプ と新しいタイムスタンプをチェックして、すべてのセンサーがデータをプッシュしたかどうかを確認するステートメントを使用します。 タイムスタンプをチェックしてセンサーがデータをデータベースにプッシュしていないかどうかをチェックしたいと思います。 しかし、非同期であるため、JavaScriptでこれを行う方法がわかりません。私はまた、タイムスタンプを持っているDBのセンサーテーブルを持っています。私はDBMSとしてmongodbを使用しています。これはJavaScriptで書かれています。タイムスタンプmongodbを使用してデータが追加されていることを確認してください

http.get('http://localhost:3000/stream', function (res) { 
var body = ''; 

//Start of request 
res.on('data', function (chunk) { 
    body += chunk; 
}); 

var query = sensorManager.find({}); 
query.exec(function (err, sensors) { 
    if (err) return handleError(err); 
    check = sensors; 
}); 


//End of request 
res.on('end', function() { 
    var data = JSON.parse(body); 

    check.forEach(function (status) { 
     data.forEach(function (sensor) { 
      if (sensor.sensor_id == status.sensor_id && sensor.sensor_type == status.sensor_type) { 
       if (sensor.reading == null) { 
        var options = { 
         uri: 'http://localhost/api/nodemanager/' + status._id, 
         method: 'PUT', 
         headers: { 
          'Content-Type': 'application/json' 
         }, 
         json: {"interval": status.interval + 1} 
        }; 
        request(options, function (error, response, body) { 
        }); 
        if (status.interval == 3 && status.status == "active") { 
         var options = { 
          uri: 'http://localhost/api/nodemanager/' + status._id, 
          method: 'PUT', 
          headers: { 
           'Content-Type': 'application/json' 
          }, 
          json: {"status": "intermittent failures"} 
         }; 
         request(options, function (error, response, body) { 
         }); 
        } 
        if (status.interval == 30 && status.status == "intermittent failures") { 
         var options = { 
          uri: 'http://localhost/api/nodemanager/' + status._id, 
          method: 'PUT', 
          headers: { 
           'Content-Type': 'application/json' 
          }, 
          json: {"status": "inactive"} 
         }; 
         request(options, function (error, response, body) { 
         }); 
        } 

       } 
      } 
     }); 
    }); 
}); 

私は新しいタイムスタンプに

を取得するために、もう一度、クエリを実行したがため、タイムスタンプは常に同じであるプル後のセンサー

の古いタイムスタンプを取得するクエリを実行しますinsertメソッドが非同期であるため、挿入が完了する前に再チェックが行われます。挿入メソッドの後に再チェックメソッドを呼び出す場合でも。

+0

なぜあなたはマングースを使用しませんか?ドキュメントが正しく挿入されている場合はドキュメントを返し、それ以外の場合はエラーを返します。 '' ModelSave((error、document)=> {if(error ||!document)console.log( "何か間違っていました")}) ' –

+0

"は "api?どのようなAPIですか? –

+1

もちろんですが、なぜこのAPIではMongooseを使用していませんか?データを送信し、Mongooseを使用して挿入し、成功した場合は文書を返信し、ジョブを完了しました –

答えて

0

"新しい日付"でタイムスタンプを挿入できます。もっとに関する情報と例here.

サンプルコード:

db.products.update(
    { _id: 1 }, 
    { 
    $set: { item: "apple" }, 
    $setOnInsert: { dateAdded: new Date() } 
    }, 
    { upsert: true } 
) 

そして、あなたは自分の古くなったセンサーを見つけるために、クエリを実行します。

+0

センサーのIDまたは名前を確認してください。センサーが時代遅れであるかどうかは分かります。 しかし、私たちが話しているセンサーの数とデータが古くなった時を知ることは、助けになるでしょう。 – DirtDiver

+0

別の方法でチェックインしてみませんか?データが古くなったときに、クエリを実行してアラーム(または何をしたいか)をトリガーするだけです。 MongoDBとJavaScriptでの経験はありますか?あなたはデータで何をしたいですか(おそらくクライアントアプリケーションでのみ表示されます)? – DirtDiver

+0

タイムスタンプが実際にdbに新しいDate()を介して書き込まれ、dbから値を読み取る場合、違いがあります。 – DirtDiver

関連する問題