Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

272
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda