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

如何将Node.js/Express后端数据传递至前端JavaScript?

解决Express + EJS中前端JS获取后端数据的问题

你的问题出在静态JS文件无法被EJS模板引擎解析——frontend.js是作为静态资源被浏览器请求的,Express只会处理.ejs页面里的模板语法(<%= %>这类标签),不会去解析独立的JS文件里的模板代码,所以浏览器拿到的是原封不动的var data = <%=data%>;,自然无法正确获取数据。

下面给你三种可行的解决方案,你可以根据场景选择:

方案一:在EJS页面中嵌入脚本传递全局变量

这是最简单直接的方式,先在home.ejs里把后端数据转成JSON字符串,挂载到全局变量,再引入前端脚本:

<!-- home.ejs 代码 -->
<!DOCTYPE html>
<html>
<head>
  <title>Home Page</title>
</head>
<body>
  <!-- 先在页面内的脚本中定义全局变量 -->
  <script>
    // 用JSON.stringify把后端对象转成合法的JS对象字面量
    const backendData = <%= JSON.stringify(data) %>;
  </script>
  <!-- 再引入你的前端脚本 -->
  <script src="frontend.js"></script>
</body>
</html>

然后在frontend.js里就可以直接使用这个全局变量了:

// frontend.js 代码
console.log('后端传递的数据:', backendData);
// 在这里处理你的数据逻辑

⚠️ 注意:一定要用JSON.stringify,如果直接写<%= data %>,当data是对象时会输出[object Object],完全无法使用。

方案二:通过HTML元素的data属性传递数据

如果不想污染全局变量,可以把数据存在页面元素的data-*属性里,再用前端JS读取:

<!-- home.ejs 代码 -->
<div id="app-container" data-backend-data="<%= JSON.stringify(data) %>"></div>
<script src="frontend.js"></script>

然后在frontend.js中读取并解析:

// frontend.js 代码
const container = document.getElementById('app-container');
// 从dataset中读取属性,再转成JS对象
const backendData = JSON.parse(container.dataset.backendData);
console.log(backendData);

方案三:前端通过API接口异步获取数据

如果你的数据需要动态更新,或者不想在页面渲染时直接注入数据,可以让前端发起AJAX请求获取:
首先在Express后端新增一个接口:

// Express后端代码
app.get('/api/get-data', (req, res) => {
  // 直接返回JSON格式的数据
  res.json(data);
});

然后在frontend.js中用fetch请求这个接口:

// frontend.js 代码
fetch('/api/get-data')
  .then(response => {
    if (!response.ok) {
      throw new Error('请求失败');
    }
    return response.json();
  })
  .then(backendData => {
    console.log('从API获取的数据:', backendData);
    // 处理数据逻辑
  })
  .catch(err => {
    console.error('获取数据出错:', err);
  });

内容的提问来源于stack exchange,提问作者chongzixin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:49:05