2017-02-08 19 views
0

SITUATION:私は1時間のスパム期限を作成している巨大な時間経過)

ユーザが投稿すると、Date.now()user.lastに保存されます。

再び投稿すると、Date.now()で現在の時刻を取得し、それをuser.lastと比較します。


問題:

問題は以下の通りです:

私は約1分で二回投稿してください。

2つのポストの時間の差は、私のコードのコンソール出力によれば1時間を超えています。


QUESTION:

私が間違って何をしましたか?私はenv TZをUTCに設定しました。


CODE:

exports.create = function (req, res) { 
    var article = new Article(req.body); 
    article.user = req.user; 

    console.log("LAST: "+article.user.last.getTime()); 
    console.log("Date.now(): "+Date.now()); 

    if (article.user.last.getTime() != null && article.user.last.getTime() != undefined) { 
     console.log("DATE DIFFERENCE: "+(Date.now() - article.user.last)); 
     if ((Date.now() - article.user.last > 1000 * 60 * 60)) { 
      article.save(function (err) { 
       if (err) { 
        return res.status(422).send({ 
        message: errorHandler.getErrorMessage(err) 
        }); 
       } else { 
        res.json(article); 

        if (article.user) { 
         article.user.last = Date.now(); 
         console.log("NEW LAST: "+article.user.last.getTime()); 
        } else { 
         res.status(401).send({ 
          message: 'User is not signed in' 
         }); 
        } 
       } 
      }); 
     } 
     else { 
      return res.status(422).send({ 
      message: "You need to wait 1 hour between Article creations or if you just created an account." 
      }); 
     } 
    } 
    else { 
     console.log("2"); 
     article.save(function (err) { 
     if (err) { 
      return res.status(422).send({ 
      message: errorHandler.getErrorMessage(err) 
      }); 
     } else { 
      res.json(article); 

      if (article.user) { 
       article.user.last = Date.now(); 
       console.log("3) LAST: "+article.user.last.getTime()); 
      } else { 
       res.status(401).send({ 
        message: 'User is not signed in' 
       }); 
      } 
     } 
    }); 
    } 
}; 

CONSOLE:

LAST: 1486438249652 
Date.now(): 1486515834377 
DATE DIFFERENCE: 77584725 
NEW LAST: 1486515834394 

EDIT:

Userモデル

/** 
* User Schema 
*/ 
var UserSchema = new Schema({ 

    //SOME CODE 

    last: { 
    type: Date 
    }, 

    //SOME CODE 

}); 
+0

あなた 'はconsole.log(article.user.last)'あなたは何を得るのですか? – jonmrich

+0

@jonmrich例: 'Tue Feb 07 2017 03:30:49 GMT + 0000(UTC)' – Coder1000

+0

これは、 'console.log(" DATE DIFFERENCE: "+(Date.now() - article.userです。最後に)); 'あなたに番号を教えてください。 – jonmrich

答えて

1

問題は、ユーザレコードが実際に保存されていないことです。あなたのコードは記事を保存してからはプロパティをに設定しますが、保存するユーザのMongooseモデルはありません(article.user.save())。

つまり、.lastは、最初に作成された時点のままであり、したがってログに記録された日付の違いは単調増加します。ここで

は重要なビットです:

article.save(function(err) { 
    if (err) { 
    res.status(422).send({message: errorHandler.getErrorMessage(err)}); 
    } else { 
    if (article.user) { 
     article.user.last = Date.now(); 
     article.user.save(function (err) { 
     if (err) res.status(500).send({message: 'Database error'}); 
     else res.json(article); 
     } 
    } else { 
     res.status(401).send({message: 'User is not signed in'}); 
    } 
    } 
}); 
+0

私は単調増加*が暴言だと思います。 – RobG

+0

@RobG私はそうは思わない:Dは「単調に」は、(関数または量の)関数が、決して減少しないか、または決して増加しないように変化することを意味する」「単調に増加する」とは、減少する。これは実際には、単調増加関数がかなり多いので、数学(解析)クラスで頻繁に使用される用語です。D – Coder1000

+0

@RobG Wolfram Alpha:http://mathworld.wolfram.com/MonotoneIncreasing.html – Coder1000

関連する問題