基于 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
方法,对于这类任务非常方便。
您应该在代码中使用更多的变量,这样更容易使用! :)
我正在使用 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
方法,对于这类任务非常方便。
您应该在代码中使用更多的变量,这样更容易使用! :)