在做項目的時候碰到一個坑。在此記錄下來。
nodejs項目,使用的是LRU-cache 。前端使用的是ejs模板引擎
在頁面上點擊按鈕,進行查詢的時候,刷新頁面,顯示查詢結果(結果內含有一個日期數據)。但是發現有一定機率刷新成功,一定機率報錯。
錯誤信息爲date不存在getFullYear()方法。
覺得很奇怪,因爲查看數據的明明是Date類型。
後來乾脆將 typeof date 輸出到當前頁面上。連續刷新頁面。發現打印信息第一次是object,以後都是string。也就是說第一次查詢的時候是object類型,以後都是string類型。
由此推測出是緩存出了問題。
在第一次查詢的時候,直接從數據庫拿數據,所以類型沒問題。但是在第一次取得數據的時候,會將查詢結果以字符串形式緩存。第二次查詢的時候,直接從緩存讀數據,所以頁面會報錯。因爲第二次已經不是Date格式了,不存在getFullYear()方法。
解決辦法:
在頁面上使用 new Date()對所取得的數據進行轉換。這樣就不會報錯了。
<span style="font-size:18px;"><% data.date-change = new Date(data.date)%></span>
接下來使用data.data-change進行時間數據輸出就沒問題了。