angularjs - 如何获取 MEAN 堆栈中的服务器时间? (MongoDB、Express、Angular、 Node )

标签 angularjs node.js mongodb

代码:

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

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

  if (article.user.last != null && article.user.last != undefined) {
      console.log("1");
      console.log("DATE: "+(Date.now() - article.user.last));
      if ((Date.now() - article.user.last.getTime() > 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("2) 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'
                });
            }
        }
    });
  }
};
<小时/>

情况:

我想使用服务器时间,而不是使用 Date.now()

我的反垃圾邮件计时器会阻止用户每小时发帖多次。

它工作得很好,除了一件事:如果我使用 Date.now(),我可以通过简单地将本地时钟提前 1 小时来绕过计时器。

最佳答案

当您在本地进行测试时 - 您的计算机就是服务器 - 因此将本地计算机设置为提前 1 小时的测试并不是真正有效的测试,因为它还将服务器时间设置为提前 1 小时。

顺便说一句,

Date.now() 是获取时间的正确方法。我还想说,当您处理这样的时间时,请记住使用 UTC。

关于angularjs - 如何获取 MEAN 堆栈中的服务器时间? (MongoDB、Express、Angular、 Node ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42075690/

相关文章:

javascript - AngularJS展开和折叠问题

javascript - 奇怪的行为 angularjs 返回 "TypeError: Cannot assign to read only property"

angularjs - 在 $rootScope 中存储变量是好的做法吗?

node.js - KrakenJS Controller 路由

javascript - 将变量从主 gulpfile.js 传递到跨多个文件的任务

node.js - Mongolab "quota exceeded"虽然我几乎没有达到最大允许大小的一半

c# - 如何在 Mongodb 的聚合框架中编写日期范围查询?

javascript - 如何迭代对象数组并添加属性

node.js - Loopback 3 文件上传在 DigitalOcean 服务器上不起作用

mongodb - Elasticsearch 'size:'与MongoDB batch_size