两个Date.now()之间的巨大时间间隔

时间:2017-02-08 01:09:51

标签: javascript date

状况:

我创建了1小时的垃圾邮件时间限制。

当用户发帖时,当前时间Date.now()会保存在user.last

当他再次发帖时,我会使用Date.now()获取当前时间并将其与user.last进行比较。

问题:

问题如下:

我在大约1分钟内发布两次。

根据我的代码控制台输出,两个帖子之间的时间差异大于1小时。

问题:

我做错了什么?我确实将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

修改

用户模型

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

  //SOME CODE

  last: {
    type: Date
  },

  //SOME CODE

});

1 个答案:

答案 0 :(得分:1)

问题是用户记录实际上并未保存。您的代码保存文章,然后设置用户的.last属性,但用户的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'});
    }
  }
});