【问题标题】:Pass node Array to JavaScript in ejs file将节点数组传递给 ejs 文件中的 JavaScript
【发布时间】:2020-05-01 02:53:47
【问题描述】:

我想将我的 app.js 中的数组传递给我的 EJS 文件中的 JavaScript。在我的循环函数中,我想将一些数据填充到对象中,以将它们推送到 JS 数组中以用于约会日历。但我无法传递数据.. 这是我的代码片段:

app.js:

router.route ('/torauswahl').get(function (req, res) {

    Buchung.find(function (err, buchungen) {
        if (err)
            return res.send(err);

        res.render('torauswahl',{
            buchungen: JSON.stringify(buchungen)
        });
    });
});

还有我 EJS 中的 JS:

var appointments = [];
        var appointment = {};
        var buchungArray = <%=buchungen %>;

        for(var i=0; i < buchungArray.length; i++) {
            var monat = 1 + buchungArray[i].from.getMonth();
            var von = -1 + buchungArray[i].from.getHours();
            var vonMin = buchungArray[i].from.getMinutes();
            var bisMonat = 1 + buchungArray[i].from.getMonth();
            var bis = -1 + buchungArray[i].to.getHours();
            var bisMin = buchungArray[i].to.getMinutes();

            if (bisMin === 0) {
                bisMin = bisMin + "0";
            }
            if (vonMin === 0) {
                vonMin = vonMin + "0";
            }

            appointment[i] = {
                calendar: buchungArray[i].tor,
                start: new Date(buchungArray[i].from.getDate(), monat, buchungArray[i].from.getDay(), von, vonMin, 0),
                end: new Date(buchungArray[i].to.getDate(), bisMonat, buchungArray[i].to.getDay(), bis, bisMin, 0)
            }
            appointments.push(appointment[i]);
        }

在我声明 buchungArray 的地方,IntelliJ 向我显示错误:预期表达式。 我感谢任何帮助! 干杯,Mert

【问题讨论】:

  • 渲染的客户端JS是什么样子的?
  • “在我声明 buchungArray 的地方,IntelliJ 向我显示了一个错误”——嗯,大概它正在尝试将您的 EJS 模板视为 JavaScript ......它不是。代码在渲染并发送到浏览器时是否有效?
  • 这是上面的第二个代码部分。
  • 没有。第二个代码部分显示的是 EJS 模板,而不是你渲染它时得到的 JavaScript。
  • @Quentin 我不知道.. 我是学习 EJS 的新手,必须使用我在 app.js 中传递的渲染变量执行 JavaScript

标签: javascript node.js mongodb mongoose ejs


【解决方案1】:

&lt;%=buchungen %&gt; 转义数据以插入 HTML,但您将其插入到 &lt;script&gt; 中,其中正常的 HTML 转义规则不适用。

您可以使用&lt;%- buchungen %&gt; 获取原始输出。

您的 IDE 仍然可能会抱怨,因为它会尝试像处理纯 JavaScript 一样处理您的 EJS 模板。您可能希望将数据存储在其他位置,例如 data 属性中。

<script data-buchungen="<%=buchungen %>">
    var buchungArray = JSON.parse(document.currentScript.dataset.buchungen);
    // etc
</script>

【讨论】:

  • 感谢您的回答。但我仍然有问题,字符串没有像我在上面的评论中所说的那样格式化。你知道为什么吗?
  • 出于同样的原因,但没关系,因为普通的 HTML 转义规则 do 应用在属性值中,所以浏览器会在它通过时解码它们document.currentScript.dataset.buchungen 给 JS。
  • 好的,完美,谢谢!但是我认为我的循环函数有问题,因为我看不到约会对象..你知道为什么吗?
  • 我的浏览器出现错误:TypeError: null is not an object (evalating 'document.currentScript.dataset') 正常吗?
  • @MertSilva — 否。jsbin.com/lacalezivi/edit?html,console 对我来说很好。
猜你喜欢
  • 1970-01-01
  • 2016-04-09
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
相关资源
最近更新 更多