Tengo una aplicación CRUD simple, usando express, mongoose y EJS. En la página index.EJS, tengo una tabla que muestra cada producto con casillas de verificación en cada fila, y cada casilla de verificación tiene el _ID del producto. Tengo un botón Eliminar seleccionado que llama a una función que coloca todas las entradas marcadas en una matriz, que esencialmente se convierte en una matriz de ID que quiero eliminar. Luego quiero usar los métodos deleteMany y $in para eliminar esas entradas de mi base de datos, como se muestra a continuación:
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 } } ) }El problema es que no puedo acceder a mi modelo de producto ni a mi base de datos desde el archivo index.ejs. Solo puedo acceder a ellos a través de mi archivo index.JS del lado del servidor. Entonces, parece que necesitaría una forma de enviar una solicitud de publicación a index.js para poder realizar las funciones de la base de datos allí. Por supuesto, así es como manejo todas las demás rutas, como obtener, eliminar y colocar para una sola entrada. Pero no sé cómo hacerlo para una matriz de múltiples entradas.
Primera pregunta: ¿Cómo envía y analiza esa matriz?
Segunda pregunta: ¿Cómo envío una solicitud de publicación desde esta función? No tengo un formulario, y tratar de hacerlo a través de un URI no tiene sentido porque en lugar de tener un :id para los parámetros, tengo una serie de ID. No me gustaría que aparecieran todos en la URI. Estaba pensando que tendría que piratear un formulario oculto, completar el campo de nombre con la matriz y luego llamar a form.submit() con la función. Pero eso parece muy, muy kludgey.
Disculpas de antemano si he expresado algo incorrectamente o de manera incómoda, solo estoy aprendiendo express/mongoose.
Esta es una tarea muy simple y básica y le recomiendo que lea la documentación de express.js. debe agregar un enrutador posterior en el lado del servidor y realizar una solicitud utilizando fetch , axios u otras bibliotecas y herramientas. deberías hacer algo como esto:
En su index.js (lado del servidor):
app.post('/deleteMany' ,(req,res) => { const toDelete = req.body.toDelete await Product.deleteMany({_id: {$in: toDelete}}) res.send('deleted') // or whatever }) nota: debe usar body-parser en su aplicación express para obtener req.body .
en su archivo ejs (frontend):
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 }) }) }