繁体   English   中英

使用 express 和 mongoose,如何使用 POST 路由将多个 ID 的数组从客户端发送到服务器端?

[英]Using express and mongoose, how do I send an array of multiple IDs from the client-side to server-side using a POST route?

我有一个简单的 CRUD 应用程序,使用 express、mongoose 和 EJS。 在 index.EJS 页面中,我有一个表格,显示每个产品的每一行都有复选框,每个复选框都有产品的 _ID。 我有一个 Delete Selected 按钮,它调用一个函数,该函数将所有选中的条目放入一个数组中,该数组本质上变成了一个我想要删除的 ID 数组。 然后我想使用 deleteMany 和 $in 方法从我的数据库中删除这些条目,如下所示:

 async function deleteMany() { const toDelete = [] const checkboxes = document.querySelectorAll('input[type="checkbox"]') for (let checkbox of checkboxes) { if (checkbox.checked == true) { toDelete.push(checkbox.value) } } await Product.deleteMany( { _id: { $in: toDelete } } ) }

问题是,我无法从 index.ejs 文件访问我的 Product 模型或我的数据库。 我只能通过我的服务器端 index.JS 文件访问它们。 所以似乎我需要一种方法将 post 请求发送回 index.js,以便我可以在那里执行数据库功能。 当然,这就是我处理所有其他路由的方式,例如单个条目的 get、delete 和 puts。 但我不知道如何处理多个条目的数组。

第一个问题:如何发送和解析该数组?

第二个问题:我实际上如何从这个函数中提交一个发布请求? 我没有表单,并且尝试通过 URI 进行操作是没有意义的,因为我有一个 ID 数组,而不是一个 :id 作为参数。 我不希望它们都出现在 URI 中。 我在想我必须把一个隐藏的表单组合在一起,用数组填充 name 字段,然后用函数调用 form.submit() 。 但这似乎非常非常笨拙。

如果我表达错误或笨拙,请提前道歉,我只是在学习 express/mongoose。

这是一项非常简单和基本的任务,我强烈建议您阅读 express.js 文档。 您应该在服务器端添加一个 post 路由器,并使用fetchaxios或其他库和工具发出请求。 你应该做这样的事情:

在您的index.js (服务器端)中:

app.post('/deleteMany' ,(req,res) => {
  const toDelete = req.body.toDelete
  await Product.deleteMany({_id: {$in: toDelete}})
  res.send('deleted') // or whatever
})

注意:您需要在 Express 应用程序中使用body-parser才能获得req.body

在您的 ejs 文件(前端)中:

async function deleteMany() {
  const toDelete = []
  const checkboxes = document.querySelectorAll('input[type="checkbox"]')
  for (let checkbox of checkboxes) {
    if (checkbox.checked == true) {
      toDelete.push(checkbox.value)
    }
  }
  await fetch("server-url/deleteMany", {
    method: "POST",
    body: JSON.stringify({ toDelete })
  })
}

暂无
暂无

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

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