如何使.ejs文件可以访问.js变量

时间:2018-06-06 13:53:10

标签: javascript node.js express ejs template-engine

我有一个index.js文件和一个list.ejs文件,我告诉明文文件包括:

index.js

const express = require("express");
const app = express();

app.set("view engine", "ejs"); //Express Template Engine = embedded js
app.set("views", __dirname + "\\views");

let varToUseInEJS = 5;

app.get("/", (req, res) => {
    console.log("Path of Request: " + req.path);
    res.render("list");
});

app.listen(8080, "localhost", 1, () => {
    console.log("Example app listening on: 127.0.0.1:8080");
})

list.ejs:

<!DOCTYPE html>
<html>

<body>
    <table>
        <tr>
            <th>Number</th>
        </tr>
        <% for(let i = 1; i < varToUseInEJS; i++) { %>
            <tr>
                <td>
                    <%= i %>
                </td>
            </tr>
            <% } %>
    </table>
</body>

</html>

当我将“varToUseInEJS”更改为例如5时,它工作并显示一个包含1到5 +标头的表,但在这种情况下,node.js调试器给出了以下错误:

>> 9|         <% for(let i = 1; i < varToUseInEJS; i++) { %>
10|             <tr>
11|                 <td>
12|                     <%= i %>
varToUseInEJS is not defined

有没有办法让所有.js文件的变量自动显示给ejs文件?

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

varToUseInEJS指向.ejs文件... ... ... varToUseInEJS指向.js文件

app.get('/', (req, res) => {
    res.render('list', {varToUseInEJS: varToUseInEJS});
}

答案 1 :(得分:0)

这会将varToUse传递给工作表。注意第二个参数只是一个JS对象。

app.get('/', (req, res) => {
    res.render('list', {'varToUse': 5});
}

答案 2 :(得分:0)

要概括@Francisco,您还可以将varToUseInEJS作为变量传递。只需确保您在res.render()中传递的变量的名称与EJS表达式中的名称相匹配。

`app.get('/', (req, res) => {
    res.render('list', {'varToUseInEJS': varToUseInEJS});
}`