Node.js+EJS渲染诗歌时HTML代码显示异常求助
问题解决思路
核心问题分析
- 函数逻辑错误:你提供的输入诗歌是一维数组(每个元素是单行诗句),但
formatPoem函数里错误地将每个元素当作数组执行stanza.map,这会触发报错——字符串并没有map方法。 - EJS自动转义HTML:EJS默认用
<%= %>输出内容时会转义HTML特殊字符,导致<br>被转换成<br>,直接显示成文本而非换行效果。
解决方案
1. 修正formatPoem函数
根据你的输入结构(一维数组),直接将每行诗句用<br>拼接即可:
function formatPoem(poem) { // 一维数组直接用<br>分隔每行 return poem.join('<br>'); }
如果后续需要支持多节诗歌(二维数组,每个子数组对应一节),可以调整为:
function formatPoem(poem) { // 二维数组:每节内的行用<br>分隔,节与节之间用双换行分隔 return poem.map(stanza => stanza.join('<br>')).join('<br><br>'); }
2. EJS中使用非转义输出
在EJS模板里,用<%- %>标签替代默认的<%= %>,这样HTML代码会直接生效而非被转义:
<div class="poem-container"> <%- formatPoem(poem) %> </div>
效果验证
修正后,页面会正确渲染<br>为换行,诗歌的分行结构正常显示,不会出现HTML代码文本。
内容的提问来源于stack exchange,提问作者Kribb88
相关产品推荐
相关产品推荐

