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

如何在Node.js的app.js中访问EJS脚本标签内声明的变量?

能否在Node.js服务端访问EJS客户端script变量?

结论:无法直接读取,但可以通过客户端主动发送数据的方式实现

EJS里<script>标签内的变量是在浏览器(客户端)环境执行的,服务端app.js无法直接获取客户端内存中的变量。但可以通过HTTP请求让客户端把变量值传给服务端,具体实现如下:

步骤1:在app.js中添加接收数据的接口

const express = require('express');
const app = express();
app.use(express.json()); // 解析JSON格式的请求体

// 接收客户端发送的num变量
app.post('/submit-num', (req, res) => {
  const clientNum = req.body.num;
  console.log('收到客户端的num值:', clientNum);
  // 这里可以对clientNum做后续业务处理
  res.send('数据接收成功');
});

// 渲染my.ejs页面
app.get('/', (req, res) => {
  res.render('my');
});

app.listen(3000, () => console.log('服务运行在http://localhost:3000'));

步骤2:修改my.ejs中的script代码,发送变量到服务端

在原有script标签内添加发送请求的逻辑,把num传给服务端接口:

<script type="text/javascript">
  var num = 2;
  // 使用fetch发送POST请求
  fetch('/submit-num', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ num: num })
  })
  .then(res => res.text())
  .then(msg => console.log(msg))
  .catch(err => console.error('发送失败:', err));
</script>

核心逻辑

  1. EJS模板由服务端渲染后发送到浏览器,此时num变量才会在客户端内存中初始化。
  2. 客户端通过fetch(或XMLHttpRequest)发起HTTP请求,将变量值以JSON格式传递给服务端的接口。
  3. 服务端通过req.body读取请求体中的数据,从而获取到客户端的num值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:27:11