简体   繁体   English

EJS客户端变量未定义

[英]EJS client side variables undefined

Here is my very code which I got from the example in the EJS readme: 这是我从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>

With just that basic code, I'm getting an error somehow, 仅使用基本代码,我就以某种方式出错了,

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)

Is there something obvious I'm missing? 有什么明显的我想念的东西吗?

Try to pass it under locals as follows 尝试通过以下方式将其传递给当地人

 <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> 

Pretty late here, but I just solved this problem myself. 在这里很晚,但是我自己解决了这个问题。 The problem is that the EJS you want rendered by the client is in a .ejs file that's first being parsed by the server, so the server is the one that's throwing the error because it isn't reading your JS to know what people is. 问题在于,您要由客户端呈现的EJS位于首先由服务器解析的.ejs文件中,因此服务器是引发错误的服务器,因为它没有读取JS来了解people是什么。

The quick fix to this was to put the code that's rendering the client side EJS in an external .js file and include it. 对此的快速解决方案是将呈现客户端EJS的代码放在一个外部.js文件中,并将其包括在内。 But I believe you can also use ejs.delimiter property to change the tags from <% %> to something like <? ?> 但我相信您也可以使用ejs.delimiter属性将标记从<% %>更改为<? ?> <? ?> , and this way, that section of code won't get parsed by the server. <? ?> ,这样,服务器就不会解析该部分代码。

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

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