EJS模板中能否实现类似Classic ASP的response.write直接输出功能
EJS是否支持在
<% %>逻辑块内直接调用输出 支持,不需要拆分逻辑标签和输出标签,也不需要自行实现ejs.write()方法,EJS在<% %>脚本块的执行上下文中内置了直接输出的API,使用体验和Classic ASP的response.write()基本一致。
实现方法
EJS编译模板时会生成独立执行函数,内部维护输出缓冲区,同时在上下文暴露print()方法供脚本块内直接输出:
print(输出内容):输出原始非转义内容,效果等价于<%- 输出内容 %>print(输出内容, true):输出前自动转义HTML特殊字符,效果等价于<%= 输出内容 %>
你需要的同块内完成变量生成、内容输出的写法可以直接按如下方式实现:
<% let someString = generateSomeStringHere() // 输出原始内容 print(someString); // 需要转义HTML时使用下面的写法 // print(someString, true); %>
注意事项
print()是EJS原生提供的公开上下文方法,不需要额外引入或挂载变量,所有<% %>脚本块内都可以直接调用- “变量在模板外部生成”只是通用开发最佳实践,不是EJS的语法强制约束,你完全可以根据实际业务场景在模板脚本块内编写逻辑、直接输出,不存在语法问题
- 不要直接操作
__output这类内部私有变量,这类变量名可能随版本迭代调整,使用公开的print()方法是最稳定兼容的方案
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

