基于 URL 的快速重定向

Express redirect based off URL

我正在使用 Express & Node.js

router.get('/:year?/:month?/:day?', function(req, res) {

  var date = moment();
  if (req.params.year && req.params.month && req.params.day) {
    var dateString = req.params.year + " " + req.params.month + " " + req.params.day;
    var tempDate = moment(dateString, "DD MM YYYY");
    if (tempDate.isValid()) {
      date = tempDate;
    }
  }
    .catch(function (err) {
      console.error(err);
      res.send("Error");
    });
});

以上不是我的路线的完整代码。但我需要一些指示。我正在使用 Moment.js(http://momentjs.com/) 获取当前日期,对其进行格式化并通过 route.get 请求中的 url 传递。

但是,我不希望用户能够转到过去的日期。因此,如果日期已经存在并且用户也尝试导航,我想将他们重定向回当前日期。

.then (function(){
  var pastDate = function(req, res) {
    if (req.query.[pastDate]) {
      res.redirect('/');
    } else {}
  }
})

我认为语法不正确。但不确定我是否正在寻找正确的方法来执行此操作。

感谢您的帮助。

你应该可以做一个小于比较。

var goodDate = function() {
  var now = moment();
  if (this < now) {
    return false
  }
  return true
}

我查看了你的代码,它看起来非常不一致,我不完全理解你想要做什么,但你可以将它缩小到这样的范围:

router.get('/:year?/:month?/:day?', function (req, res) {
  var year = req.params.year;
  var month = req.params.month;
  var day = req.params.day;  

  if (year && month && day) {
    var requestDate = moment(day + ' ' + month + ' ' + year);
    var today = moment();

    if (requestDate.isValid() && !requestDate.isBefore(today)) {
      // All set and valid, do stuff with the request
    } else {
      // Invalid date or the requested date is before today
      // Redirecting to /year/month/day of this day, e.g /2015/04/31
      return res.redirect('/' + today.year() + '/' + today.month() + '/' + today.date());
    }
  }
});

Moment 有一个 isBefore 方法,对于这类任务非常方便。

您应该在代码中使用更多的变量,这样更容易使用! :)