You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js EJS环境中将类/对象传递到前端模板?

问题根因

直接通过<% helpers %>输出对象时,EJS会默认调用对象的toString()方法,因此会得到[object Object]的无效输出,无法正常转为前端可用的JS对象。另外普通的JSON.stringify()无法序列化对象中的方法属性,会直接丢失函数内容,也不适用你的场景。

解决方案

如果你的helpers对象所有方法都是不依赖服务端运行时状态的纯工具函数,优先选择将helpers封装为独立的JS文件,前端直接通过script标签引入即可,无需走服务端渲染传值。
如果确实需要从服务端动态传递带方法的helpers对象到前端,可通过Node.js内置的util.inspect方法完成序列化,具体实现如下:

  1. 修改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 })
    }); 
});
  1. 修改index.html模板代码:
<script>
    // 注意要用<%- 而非<%= ,避免EJS自动转义特殊字符
    const helpers = <%- helpersStr %>;
    // 后续可直接调用所有方法
    helpers.method_1();
    helpers.method_2();
    helpers.method_3();
</script>

注意:如果helpers对象包含用户可控制的输入内容,需提前做好恶意内容过滤,避免XSS安全风险。

内容的提问来源于stack exchange,提问作者T.Todua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 11:21:03