javascript - 如何将对象从 EJS 传递到 Node.js 路由器 - Javascript、EJS、Node.js、MySQL

标签 javascript mysql node.js express ejs

我正在循环遍历 MySQL 表中的记录,将它们显示在 EJS 文件中,并且当单击其中一个时,路由到页面以编辑记录。但是,我无法将单个对象传递回我的routes.js 文件以将其路由到编辑页面。我循环浏览所有记录并打印它们没有任何问题,所以我知道数据就在那里。这是 EJS 文件的一部分,我在其中输出所有记录以供用户选择:

<body>
<div class="container">

<div class="col-sm-6 col-sm-offset-3">

    <h1><span class="fa fa-chess"></span> View Roommate Agreements</h1><br>
    <p align="center">Click on a Roommate Agreement below to view the full response and edit if necessary.</p><br>

    <% for (var i=0; i < Agreements.length; i++) { %>
        <a href="/editAgreement" style="text-decoration: none; color: #333333">
            <div class="well" align="center">

                <h3>Roommate Agreement for Room #<%= Agreements[i].roomNumber%></h3>
                <p><%= Agreements[i].roommate1%></p>
                <p><%= Agreements[i].roommate2%></p>
                <% var Agreement = Agreements[i]%> //THIS is where I'm trying to declare the object
            </div>
        </a>
    <% } %>

    <hr>
    <p align="center">
        <a href="/agreement" class="btn btn-default btn-sm"><span class="fa fa-arrow-circle-left"></span> Back</a>
        <a href="/logout" class="btn btn-default btn-sm"><span class="fa fa-sign-out-alt"></span> Logout</a>
    </p>

</div>

</div>
</body>

这里是 Get 函数,用于将对象路由到编辑页面。您可以看到我试图将对象记录到控制台的位置,以确保我获得正确的信息,但它当前打印为“未定义”。

app.get('/editAgreement', isLoggedIn, function(req, res) {
    res.render('editAgreement.ejs', {
        Employee: req.user
    })
    console.log(req.body.Agreement);
})

我不确定问题是否出在我如何在 EJS 中声明对象变量,或者我如何尝试在 Get 函数中使用它,因为我是 Javascript 新手。任何提示或帮助将不胜感激,谢谢! :)

最佳答案

要使用 GET 将变量传递到另一个页面,您必须将它们传递到 url 中,这样您就会暴露数据,这不安全且需要大量工作如果你有很多信息要传递,你应该只将协议(protocol)的id传递给get路由,获取协议(protocol)然后渲染 View ,例如:

<% for (var i=0; i < Agreements.length; i++) { %>
    <a href="/editAgreement/<%= Agreements[i].id %>" style="text ...

然后:

app.get('/editAgreement/:id', isLoggedIn, function(req, res) {
    let agreementId = req.params.id;

    let agreement = // go fetch the agreement from the database like you did before with the list of agreements

    res.render('editAgreement.ejs', agreement)
})

关于javascript - 如何将对象从 EJS 传递到 Node.js 路由器 - Javascript、EJS、Node.js、MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49546697/

相关文章:

javascript - 测验完成后将分数重置为 0

javascript - 如何检测 html web 应用程序中的滑动原点位置?

python - 将带有 unicode、decimal 和 date 对象的元组转换为 python 中的字符串

javascript - NodeJS 将 Promise 转换为 Promise.all

node.js - Apache 代理后面的 Sockjs/socketio 断开连接延迟

javascript - 如何从 Javascript 生成 Vue 组件

javascript - 如何在通过 JavaScript 加载图像时显示微调器

php - Laravel 与自定义主键的一对多关系不起作用

带有 JSON 对象的 MySql str_date

node.js - Redis Node : Ready check failed: NOAUTH Authentication required