Nodejs 使用 body-parser 在按下按钮时删除行

Nodejs Deleting row on button press using body-parser

调用数据库并生成 table。我想要它,所以我可以使用 body-parser 来了解我单击的按钮的 id / value / name 是什么,这将对应于我要删除的数据库条目。有没有一种方法可以使用表单来做到这一点,或者我必须向每个具有 id 的按钮添加一个 javascript 单击处理程序?

<form action="/deleteQuestion" method="POST">
    <tbody>
        <% results.forEach(function(r) { %>
            <tr>
                <th scope="row">
                    <%= r.Id %>
                </th>
                <td>
                    <%= r.Question %>
                </td>
                <td>
                    <%= r.Answer %>
                </td>
                <td>
                    <%= r.Wrong1 %>
                </td>
                <td>
                    <%= r.Wrong2 %>
                </td>
                <td>
                    <%= r.Wrong3 %>
                </td>
                <td>
                    <button value=<%=r.Id %> name="Delete">Delete</button>
                </td>
            </tr>
            <% }); %>
    </tbody>
</form>

nodejs 文件

app.post('/deleteQuestion', async(req, res) => {
    //Won't work the way I want it to    
    const question = req.body.Delete   
})

你应该包裹 table 行而不是整个 tbody, 然后添加 Id 作为参数

<tbody>
    <% results.forEach(function(r) { %>
        <form action="/deleteQuestion/"+<%= r.Id %>  method="POST">
            <tr>
                <th scope="row">
                    <%= r.Id %>
                </th>
                <td>
                    <%= r.Question %>
                </td>
                <td>
                    <%= r.Answer %>
                </td>
                <td>
                    <%= r.Wrong1 %>
                </td>
                <td>
                    <%= r.Wrong2 %>
                </td>
                <td>
                    <%= r.Wrong3 %>
                </td>
                <td>
                    <button value=<%=r.Id %> name="Delete">Delete</button>
                </td>
            </tr>
        </form>
    <% }); %>
</tbody>

然后在节点中用

处理它
app.post('/deleteQuestion/:id', async(req, res) => {
    // do the delete here using the id
})

一些非常骇人听闻的东西,但这似乎按照我希望的方式工作。如果有人知道正确的方法,我很乐意看到 link / 指南。

--编辑

几天后,我认为这是向按钮添加处理程序的正确方法(我忘记了 onclick 事件)

<head>
    <script type="text/javascript">
        function sendData(id) {
            $.post('deleteQuestion/' + id)
        }
    </script>
</head> 

<tbody>
    <% results.forEach(function(r) { %>
        <tr>
            <th scope="row">
                <%= r.Id %>
            </th>
            <td>
                <%= r.Question %>
            </td>
            <td>
                <%= r.Answer %>
            </td>
            <td>
                <%= r.Wrong1 %>
            </td>
            <td>
                <%= r.Wrong2 %>
            </td>
            <td>
                <%= r.Wrong3 %>
            </td>
            <td>
                <button type="submit" onclick="sendData(<%=r.Id %>)" class="btn btn-primary">Delete</button>
            </td>
        </tr>
        <% }); %>
</tbody>

app.post('/deleteQuestion/:id', async(req, res) => {
    console.log(req.params.id);   })