我有一个简单的CRUD应用程序,使用express,mongoose和EJS。在index.EJS页面中,我有一个表格,它显示每种产品,每一行都有复选框,每个复选框都有产品的_ID。我有一个delete Selected按钮,它调用一个函数,将所有选中的条目放入一个数组中,该数组实际上变成了我想要删除的I数组。然后,我想使用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文件访问我的产品模型或数据库。我只能通过我的服务器端index.JS文件访问它们。因此,我似乎需要一种方法将post请求发送回index.js,这样我就可以在那里执行数据库功能。当然,这就是我处理所有其他路由的方式,比如get、delete和puts。但是我不知道如何处理一个包含多个条目的数组。
第一个问题:如何发送和解析该数组?
第二个问题:如何在此函数中实际提交post请求?我没有表单,而且尝试通过URI来实现也没有任何意义,因为我有一个id数组,而不是参数的:id。我不希望它们都出现在URI中。我想我必须拼凑一个隐藏的表单,用数组填充name字段,然后用函数调用form.submit()。但这看起来非常非常笨拙。
提前道歉如果我表达错误或笨拙,我只是在学习express/mongoose。
发布于 2021-10-17 08:43:27
这是一个非常简单和基本的任务,我强烈建议您阅读express.js文档。您应该在服务器端添加post路由器,并使用fetch、axios或其他库和工具发出请求。你应该这样做:
在您的index.js
(服务器端)中:
app.post('/deleteMany' ,(req,res) => {
const toDelete = req.body.toDelete
await Product.deleteMany({_id: {$in: toDelete}})
res.send('deleted') // or whatever
})
注意:为了获得req.body
,你需要在你的express应用中使用body-parser。
在你的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 })
})
}
https://stackoverflow.com/questions/69606178
复制相似问题