繁体   English   中英

我怎样才能将一组参数传递给路由?

[英]how can i pass an array of parameters to route?

我想使用我的 ejs 视图中的复选框从 MySQL db 删除一些行到 node.js 和 React 应用程序的路由。 我可以删除一行,但如何传递参数数组?

这是我的路由器删除功能:

router.get("/delete/:id", function (request, res, next) {
  var id = request.params.id;
  const sql = `DELETE FROM users WHERE id = "${id}" `;

这是带有 id 的“删除按钮 html 代码”,用于从 ejs 文件中删除一行:

<a href="/users/delete/<%=data.id%>" class="btn btn-danger btn-sm">Delete</a>

我的桌子

我可以删除一行,但不能一次删除更多行。

首先,您应该使用 DELETE 而不是 GET 方法来删除路由器中的单行。

您可以使用 POST 方法将一组输入发送到服务器。 所以只需要为名称为“shouldDelete[]”或您喜欢的其他名称的每一行放置一个复选框。

使用括号将输入数组发送到服务器很重要。 然后你应该使用<form>发送你的 POST 请求。

客户:

<form action="/groupDelete" method="POST">
    <input type="checkbox" name="shouldDelete[]" value="ROW_ID_HERE" for="row1">
    <input type="checkbox" name="shouldDelete[]" value="ROW_ID_HERE" for="row2">
    <input type="checkbox" name="shouldDelete[]" value="ROW_ID_HERE" for="row3">
    <button type="submit">Send</button>
</form>

服务器:

router.post("/groupDelete", function (request, res, next) {
  var groupIds = request.body.shouldDelete;
  const sql = `DELETE FROM users WHERE id IN ("${groupIds.join(',')}") `;

注意:查询数据库时请遵守安全注意事项。

      const urlencodedParser = express.urlencoded({ extended: false });   

   router.post("/groupDelete", urlencodedParser, function (request, res, next) {
      var groupIds = request.body.shouldDelete;
      const sql = `DELETE FROM users WHERE id IN (${groupIds.join(",")}) `;
      console.log(sql);
      db.query(sql, function (err, data) {
        if (err) {
          throw err;
        } else {
          res.redirect("/users/user-list");
        }
      });
    });


    <form action="/users/groupDelete" method="POST">
      <input
        type="checkbox"
        name="shouldDelete"
        id="34"
        value="34"
        for="row1"
      />
      <input
        type="checkbox"
        name="shouldDelete"
        id="36"
        value="36"
        for="row3"
      />
      <button type="submit">Send</button>
    </form>

暂无
暂无

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

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