如何在EJS外部JS文件中访问Node全局变量与渲染传入变量?
解决EJS外部JS访问渲染变量与Node全局变量的问题
一、访问渲染传入的requestUrl变量
外部JS文件(如codes.js)运行在浏览器客户端环境,无法直接读取EJS模板的渲染变量,需先在EJS模板中将变量暴露到客户端全局作用域:
- 在
/views/index.ejs中,引入codes.js前添加script标签,把requestUrl挂载到window对象:
<script> // 用JSON.stringify处理字符串转义,避免语法错误 window.requestUrl = <%= JSON.stringify(requestUrl) %>; </script> <script src="/path/to/codes.js"></script>
- 在codes.js中直接调用全局变量:
let myUrl = window.requestUrl; // 或直接写requestUrl,window是全局默认对象
二、访问Node全局变量urlBack/urlFront
Node的global对象仅存在于服务端环境,客户端JS无法直接访问,同样需要通过EJS模板传递到客户端:
方法1:直接在EJS中输出全局变量
<script> window.urlBack = <%= JSON.stringify(urlBack) %>; window.urlFront = <%= JSON.stringify(urlFront) %>; </script> <script src="/path/to/codes.js"></script>
方法2:将全局变量加入渲染参数
在路由渲染时把全局变量作为参数传入EJS,后续处理同requestUrl:
resp.render("index", { amountData: amountData, emailData: emailData, requestUrl: urlBack, urlBack: global.urlBack, urlFront: global.urlFront });
核心原因
EJS渲染变量是服务端生成HTML时注入的,仅在EJS模板的代码块内有效;外部JS文件是浏览器加载后独立执行的,属于客户端上下文,必须通过服务端将变量输出到客户端全局作用域(如window)才能访问。
内容的提问来源于stack exchange,提问作者hamid-davodi
相关产品推荐
相关产品推荐

