如何在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>
核心逻辑
- EJS模板由服务端渲染后发送到浏览器,此时
num变量才会在客户端内存中初始化。 - 客户端通过fetch(或XMLHttpRequest)发起HTTP请求,将变量值以JSON格式传递给服务端的接口。
- 服务端通过
req.body读取请求体中的数据,从而获取到客户端的num值。
内容的提问来源于stack exchange,提问作者KUNAL SINGH
相关产品推荐
相关产品推荐

