繁体   English   中英

如何将对象从EJS传递给Node.js路由器 - Javascript,EJS,Node.js,MySQL

[英]How to pass an object from EJS to Node.js Router - Javascript, EJS, Node.js, MySQL

我正在处理MySQL表中的记录循环,将它们显示在EJS文件中,当单击一个时,路由到页面以编辑记录。 但是,我无法将单个Object传递回我的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 ,这样你就会暴露你的数据,如果你有大量的信息需要通过,那就不安全了很多工作,你应该只传递id get路由的协议,获取协议然后呈现视图,如:

<% 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)
})

如果您希望将对象与GET请求一起发送,则需要将它们一起发送,并且您的代码中似乎没有这样做。

最快的解决方案是使用querystring模块。 通过在代码顶部重新编写它,然后使用它发送协议Object,如下所示:

<% 

 const querystring = require('querystring');
 for (var i=0; i < Agreements.length; i++) { 
       var Agreement = Agreements[i]
 %>
        <a href="/editAgreement/?<%= querystring.stringify(Agreement) %>" style="text-decoration: none; color: #333333">
            <div class="well" align="center">

                <h3>Roommate Agreement for Room #<%= Agreement.roomNumber%></h3>
                <p><%= Agreement.roommate1%></p>
                <p><%= Agreement.roommate2%></p>
            </div>
        </a>
    <% } %>

暂无
暂无

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

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