Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

172
Views
Cómo redirigir después de la solicitud POST de Nodemailer

Tengo una aplicación con un frontend React y un backend Express. Tengo una configuración de formulario con Nodemailer que envía un correo electrónico después de que el usuario envía el formulario. Quiero activar una redirección después del envío dependiendo de si el correo electrónico se envió correctamente o no. Los correos electrónicos se envían bien, sin embargo, la redirección no. ¿Alguien sabe lo que estoy haciendo mal?

Gestor de solicitudes posteriores

 app.post('/sendApplication', cpUpload, async (req) => { await sendMail(req.files['essay'][0], req.files['recLetter1'][0], req.files['recLetter2'][0], req.body) })

Código de Nodemailer (Mis opciones de correo también están aquí, pero las omití porque son irrelevantes)

 const sendMail = async () => { await transporter.sendMail(mailOptions, (error, info) => { if (error) { console.log(error) res.sendStatus(500) } else { console.log("Message Sent " + info.response) res.sendStatus(200) } }) }

Código de interfaz

 handleRedirect = (res) => { if (res.status === 200) { this.props.history.push('/success') } else { this.props.history.push('/applicationerror') } } handleSubmit = async (e) => { e.preventDefault() let formData = new FormData() for (let i in this.state.formValues) { formData.append(i, this.state.formValues[i]) } formData.append('essay', document.getElementById('essay').files[0]) formData.append('recLetter1', document.getElementById('recLetter1').files[0]) formData.append('recLetter2', document.getElementById('recLetter2').files[0]) fetch('/sendApplication', { method: 'POST', body: formData }).then((res) => { this.handleRedirect(res) }) }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Tienes varios problemas en este código:

  1. Su controlador de ruta es el que tiene acceso al flujo de respuesta, si declara sendMail fuera de su controlador, no tiene idea de qué es res .
  2. transporter.sendMail no devuelve una Promesa, por lo tanto, no puede esperarla, pero aún puede prometerla.
  3. Está pasando los archivos tomados de multer y el body de la solicitud a sendMail , pero en realidad no está tomando ningún parámetro.
 app.post('/sendApplication', cpUpload, async (req) => { try { await sendMail() res.sendStatus(200) } catch(e){ console.log(e) res.sendStatus(500) } })

enviar correo

 const sendMail = () => { ... ... return new Promise((resolve, reject) => { transporter.sendMail(mailOptions, function (err) { if (err) reject(err) else resolve() }) }) }
  1. No debe usar history.push para cambiar la ruta, sino algo como react-router para realizar la navegación del lado del cliente.
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!