2015-04-29 81 views
0

我使用Express & Node.js快遞基於重定向URL關閉

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請求中的網址傳遞。

不過,我不希望用戶能夠去一個過去的日期。所以如果日期已經過去了,用戶也試圖導航,我想將它們重定向回當前日期。

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

我不認爲語法是正確的。但不知道如果我正在尋找正確的方式,我會怎麼做。

感謝您的幫助。

回答

1

我通過您的代碼看,它看起來真的inconsisten,我不完全理解你想要做什麼,但你也許可以縮小它是這樣的:

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()); 
    } 
    } 
}); 

瞬間有一個isBefore方法,這對於這些類型的任務來說非常方便。

你應該在你的代碼,以便它更易於使用使用更多的變數! :)

0

您應該可以做比較少的比較。

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

誤讀你的isValid函數正在做什麼。只需檢查goodDate()。如果它是錯誤的,重定向。 – tpie