Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

251
Vistas
Express JS TypeError: no se pueden leer las propiedades de un error de consulta SQL indefinido (leyendo '0')

Estoy tratando de insertar algo en mi base de datos y luego acceder a él directamente después, pero debido a que el nodo es asíncrono, esto de alguna manera no funciona según lo planeado. Pero sé que debe haber una manera de hacer que esto funcione. Aquí está mi código:

 router.post('/anzeigeerstellen', upload_inserat.single('Anzeigebild'), function (req, res) { let titel = req.body.TitelderAnzeige, beschreibung = req.body.Beschreibung, inbild = req.file.filename, ses = req.session; pool.query("INSERT INTO inserat (titel, beschreibung, inseratbildname, email) VALUES (?, ?, ?, ?)", [titel, beschreibung, inbild, ses.email], (error, results, fields) => { pool.query("SELECT iid FROM inserat WHERE titel = ?, beschreibung = ?, inseratbildname = ?, email = ?", [titel, beschreibung, inbild, ses.email], (error, results, fields) => { res.redirect('anzeige?id=' + results[0].iid); }); }); });

Y el error es el siguiente:

TypeError: Cannot read properties of undefined (reading '0')

Probé async y await pero no funcionó para mí (y tampoco estoy seguro de si lo usé bien, para ser honesto).

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Cada consulta SQL es una promesa, lo que significa que cuando inserta o solicita a la base de datos que obtenga (seleccione) datos para usted, el servidor tarda un tiempo en ejecutar su consulta. Dado que NodeJs tiene una naturaleza sincrónica, ejecuta la siguiente línea del código antes de obtener el resultado de la base de datos. Por lo tanto, tienes undefined .

No entendí muy bien el propósito de la declaración de select , pero si desea saber la id de la fila insertada, el SQL lo devuelve como result .

Entonces, si desea usar javascript de forma asíncrona, la consulta se vería así:

 //Setting the route asynchronous router.post('/anzeigeerstellen', upload_inserat.single('Anzeigebild'), async (req, res)=> { let titel = req.body.TitelderAnzeige, beschreibung = req.body.Beschreibung, inbild = req.file.filename, ses = req.session; //Awaiting until the db resolves await pool.query("INSERT INTO inserat (titel, beschreibung, inseratbildname, email) VALUES (?, ?, ?, ?)", [titel, beschreibung, inbild, ses.email], (err, results, fields) => { //Always check if there is an error if (err) console.error(err) else console.log(results) //results should be the id of the row or the row itself /*pool.query("SELECT iid FROM inserat WHERE titel = ?, beschreibung = ?, inseratbildname = ?, email = ?", [titel, beschreibung, inbild, ses.email], (error, results, fields) => { There is no need for this query since the results of the upper query is the row you wanted*/ res.redirect('anzeige?id=' + results[0].iid); //}); }); });
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda