如何在Node.js EJS环境中将类/对象传递到前端模板?
问题根因
直接通过<% helpers %>输出对象时,EJS会默认调用对象的toString()方法,因此会得到[object Object]的无效输出,无法正常转为前端可用的JS对象。另外普通的JSON.stringify()无法序列化对象中的方法属性,会直接丢失函数内容,也不适用你的场景。
解决方案
如果你的helpers对象所有方法都是不依赖服务端运行时状态的纯工具函数,优先选择将helpers封装为独立的JS文件,前端直接通过script标签引入即可,无需走服务端渲染传值。
如果确实需要从服务端动态传递带方法的helpers对象到前端,可通过Node.js内置的util.inspect方法完成序列化,具体实现如下:
- 修改app.js代码:
// 先引入内置util模块 const util = require('util'); app.get('/',function(req,res) { res.render(__dirname + '/index.html', { // 序列化对象,配置参数保证方法、深层属性都被完整保留 helpersStr: util.inspect(helpers, { showHidden: false, depth: null, compact: false }) }); });
- 修改index.html模板代码:
<script> // 注意要用<%- 而非<%= ,避免EJS自动转义特殊字符 const helpers = <%- helpersStr %>; // 后续可直接调用所有方法 helpers.method_1(); helpers.method_2(); helpers.method_3(); </script>
注意:如果helpers对象包含用户可控制的输入内容,需提前做好恶意内容过滤,避免XSS安全风险。
内容的提问来源于stack exchange,提问作者T.Todua
相关产品推荐
相关产品推荐

