繁体   English   中英

EJS客户端变量未定义

[英]EJS client side variables undefined

这是我从EJS自述文件中的示例获得的代码:

<div id="output"></div>
<script src="/js/ejs.min.js"></script>
<script>
  html = ejs.render('<%= people %>', {people: 'hello'});
  document.getElementById('output').innerHTML = html;
</script>

仅使用基本代码,我就以某种方式出错了,

ReferenceError: /Users/owner/Dropbox/answered-client/views/pages/test.ejs:4
    2| <script src="/js/ejs.min.js"></script>
    3| <script>
 >> 4|   html = ejs.render('<%= people %>', {people: 'hello'});
    5|   document.getElementById('output').innerHTML = html;
    6| </script>
    7| 

    people is not defined
        at eval (eval at compile (/Users/owner/Dropbox/answered-client/node_modules/ejs/lib/ejs.js:549:12), <anonymous>:11:26)
        at returnedFn (/Users/owner/Dropbox/answered-client/node_modules/ejs/lib/ejs.js:580:17)
        at tryHandleCache (/Users/owner/Dropbox/answered-client/node_modules/ejs/lib/ejs.js:223:34)
        at View.exports.renderFile [as engine] (/Users/owner/Dropbox/answered-client/node_modules/ejs/lib/ejs.js:437:10)
        at View.render (/Users/owner/Dropbox/answered-client/node_modules/express/lib/view.js:135:8)
        at tryRender (/Users/owner/Dropbox/answered-client/node_modules/express/lib/application.js:640:10)
        at Function.render (/Users/owner/Dropbox/answered-client/node_modules/express/lib/application.js:592:3)
        at ServerResponse.render (/Users/owner/Dropbox/answered-client/node_modules/express/lib/response.js:1008:7)
        at app.get (/Users/owner/Dropbox/answered-client/index.js:36:7)
        at Layer.handle [as handle_request] (/Users/owner/Dropbox/answered-client/node_modules/express/lib/router/layer.js:95:5)

有什么明显的我想念的东西吗?

尝试通过以下方式将其传递给当地人

 <div id="output"></div> <script src="/js/ejs.min.js"></script> <script> html = ejs.render('<%= people %>', { locals: {people: 'hello'}}); // locals document.getElementById('output').innerHTML = html; </script> 

在这里很晚,但是我自己解决了这个问题。 问题在于,您要由客户端呈现的EJS位于首先由服务器解析的.ejs文件中,因此服务器是引发错误的服务器,因为它没有读取JS来了解people是什么。

对此的快速解决方案是将呈现客户端EJS的代码放在一个外部.js文件中,并将其包括在内。 但我相信您也可以使用ejs.delimiter属性将标记从<% %>更改为<? ?> <? ?> ,这样,服务器就不会解析该部分代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM