在做项目的时候碰到一个坑。在此记录下来。
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进行时间数据输出就没问题了。