如何将Javascript变量作为参数传递给EJS对象?

时间:2019-04-04 19:05:20

标签: javascript concatenation ejs

我正在尝试将Javascript变量连接到EJS对象以使其动态。有没有办法用EJS语法或Javascript做到这一点?

例如

后端

res.render('webpage', {bookObj : bookObj})

前端

let author = "Shakespeare"
let book = "<%= bookObj['Shakespeare'] %>"  // <-- it works

let book = "<%= bookObj['" + author + "'] %>"  // <-- it does not work

2 个答案:

答案 0 :(得分:0)

您正在将EJS中的服务器端JavaScript与从中生成的客户端JavaScript混淆。

EJS标记外部的字符串语法与其中的JS无关,并且所使用的变量必须在使用它的同一软件中声明。

<% let author = "Shakespeare";  %>
let book = "<%= bookObj[author] %>" 

当然,如果输出包含特殊字符,则会中断输出,因此通常最好使用JSON编码器生成JS文字:

<% let author = "Shakespeare"; %>
let book = <%- JSON.stringify(bookObj[author]) %>;

另请参阅What is the difference between client-side and server-side programming?

答案 1 :(得分:0)

您需要在EJS上下文中定义变量以获取服务器端代码中的访问权限。

<% var author = "Shakespeare"; %>
let author = "<%= author %>";    
let book = "<%= bookObj[author] %>"