吐槽
之前笔记过于零散,做出来反而没有查阅的效果。或许里面不乏有些解决思路,但没有起到很好的复用。
今天尽量开始将尝试以主题形式去描述,我的技术文章。至于我的日常日记,当然还是琐碎的,对于我目前来说生活没有统一主题。
学习零散笔记
参观官方文档
- 官网:ejs
- 感受:官网是真的少可怜,贴了很少的介绍。具体一些用法都没有做到完整显示,只是用文字去描述。还有一些用例已经换代了,这大概是失修已久的感觉。
搜索问题
看视频
- 网站:b站
- 这是我这段时间以来,头一次看视频学习。视频一般对我来说太慢了,而且讲了一下大概
ejs
,最终我放弃了,因为视频的验证成本太高了。他讲的很基础,而且他还说嵌入式代码开发(类似php
已经不适合现在的开发模式了)
readme
- 模块里面的
readme
可能会稍微详细点。
技巧
变量运算
<% var num=0; |
迭代
<% var array=[1,2,3,4]; %> |
脚本变量
<%# 接受字符串整数布尔值以及其组成数组 %> |
碰到的问题
cache缓存
- 官方在cache使用第一次语焉不详,第二次版本落后了。
- 我花了点时间查看一下源码,大概看懂是构造类,需要把参数变为
{max:100}
;代码如下const LRU=require('lru-cache');
const ejs=require('ejs');
ejs.cache=new LRU({max:100});
插入模板
- 这个就比较搞人了,你不会想到官方文档有多唬人。反正小白级别应该是妥妥倒地那种。
- 之前使用插入模板报错,报错信息具体我也没有截图,不过可以大致列出最终堆栈抛出的异常位置,
ejs/lib/ejs.js
185 line 左右 - 没想到这个问题,竟然激发了我的潜力,无师自通了,
vscode
断点调试和堆栈追踪以及调用引用。╮(╯▽╰)╭,但没有用。 - 最后还是反复搜索
Stack overflow
才找到一个相对靠谱的解决。 - 其实问题,我应该是能独自解决的,但花费时间可能会更长。
const ejs=require('ejs');
ejs.renderFile(filePath,data,(err,str)=>{
response.end(str)
});
总结
- 不要使用
fs
模块,字符集utf-8
的字节用ejs.render
渲染一个foreach
里面的集合元素的字符串属性,这样会乱码。 - 不要使用
ejs.render
去处理带inclued
的ejs文件
,会报错,具体原因没有细究
关于hexo
模板使用问题
上述的引用类型变量在hexo
的script里无法使用,但在偶然的情况,我找到了对的方法。
快赞美我吧,这个可是官方教程上没有的东西哦,( ̄︶ ̄)↗
对于字符串,我们使用"<%= string %>"
对于数字,我们使用 <%= num %>
对于引用类型,我们使用 <%= JSON.stringify(object) %>
另外我们可以使用辅助函数来获取复杂的数据类型哦!
2022-06-26
上面有个小小的错误,当时我用ejs
引擎但被问题并没有发现,我本来是想通过手动转义处理,但在谷歌搜索也知道了答案,
谷歌的搜索,#&34;
这个会被处理掉,所以拆开搜索。
在StackOverflow
,StackOverflow Answer,其实ejs
官网上也有,我自己的知识范围应该也是没有,但是我没有想到。
<%- 引用类型ejs %>
另外,没有想到别人也和我一样找到了引用类型输出的解决方法,它看起来也很简单。
2022-06-27该吃早餐了,已经十一点┭┮﹏┭┮。
---------------- The End and I hope sunshines on the outside. ----------------