EJS传递日期字符串异常:参数值被篡改问题咨询
EJS 2.5.8日期字符串被篡改的问题解决办法
我之前也踩过EJS 2.5.8这个坑!当你传递像"2018-5-3"这种AAAA-M-D格式的日期字符串参数时,模板里用<%= date %>输出会得到2010,这可不是什么玄学bug,是EJS的解析逻辑在搞事情。
问题根源
EJS的<%= %>标签会把内部内容当作JavaScript表达式解析,而非纯字符串输出。当你写<%= date %>时,渲染后的代码会变成2018-5-3——这在JS里会被识别成减法运算:2018 - 5 - 3 = 2010,所以最终输出的就是这个计算结果。
解决办法
这里有几个靠谱的解决方式:
- 给输出加引号:在模板里把日期字符串用引号包裹,强制让它以字符串形式输出:
渲染后会变成console.log("<%= date %>")console.log("2018-5-3"),就能正确输出原日期字符串了。 - 用JSON.stringify转义:如果需要处理特殊字符或者追求更稳妥的字符串输出,用
JSON.stringify是个好选择:
它会自动给字符串加上引号,还能处理包含引号等特殊字符的场景。console.log(<%- JSON.stringify(date) %>) - 升级EJS版本:这个问题在EJS 3.x及以上版本中已经被修复,直接更新到最新版EJS,就能彻底避免这种把字符串误解析成表达式的问题。
错误示例 vs 正确示例
错误写法(输出2010):
console.log(<%= date %>)
正确写法(输出2018-5-3):
console.log("<%= date %>")
内容的提问来源于stack exchange,提问作者fazega
相关产品推荐
相关产品推荐

