2

私はnode.js、mongoDB、monk、およびexpress(すべて最新バージョン)を初めて使用します。そして、作業中に次の状況に遭遇しました。

更新されたテーブルがあり、定期的に読み取ります。そこから読み取ると、データベース内のフラグを更新して、再読み取りを防ぎます。(確認する必要がある場合に備えて、削除したくありません)。

問題は、モンクで更新を使用した後、それが永久に存在することです。フラグが付けられた後に追加するすべての投稿は、サーバーを再起動して通常に戻す必要があります。そして、私が読むと、問題が再発します。

コードに req.pause() を追加することで問題を解決できましたが、ライブ リクエストを大量にサーバーに送り込みたくはないので、これには不快感を覚えます。

これが私のコードです:

  function(req,res){
    this.getNotifications = function(req,res){
      var username = req.params.username;
      var justOpened = req.params.justOpened;

    var callback = function(e,doc) {
      if(doc != ""){
        db.update(username + "Notifications",{read:0},{$set:{read:1}},function(){});
        req.pause(); // if I delete this the update keeps going
        res.json(doc);
        res.status = 200;
        res.end();
      } else {
        setTimeout(function(){db.find(username + "Notifications",read:0},{},callback);},5000);
      }
    };

    if (justOpened == "true"){
      db.find(username + "Notifications",{},{},callback);       
    } else {
      db.find(username + "Notifications",{read : 0},{},callback);   
    }
 }

私のdatabase.updateメソッドは次のようになります:

this.update = function(collectionName,queryObj,update,callback){
    var collection = db.get(collectionName);
    collection.update(queryObj,update,{multi:true},callback);
}

基本的に req.pause 行を削除すると、更新は終了せず、将来にわたって機能します。

これらの原因を知っている人はいますか?

4

1 に答える 1

0

私は質問を解決しました。誰かが同じ問題を抱えている場合に備えて、ここに追加します。

コードにリターンを追加すると、関数が停止しました。

于 2015-10-23T06:00:48.290 に答える