He creado un formulario que quiero poder enviar correos electrónicos, para hacer esto he intentado seguir este tutorial de youtube: https://www.youtube.com/watch?v=_3-By9QfFa0
Sin embargo, me encuentro con un problema en el que aparece el error en el título de la pregunta que aparece en el navegador web de mi consola cuando intento enviar el formulario. Me doy cuenta de que el problema podría tener algo que ver con una de las rutas en alguna parte, pero no puedo resolverlo (a menos que sea algo completamente diferente).
schoolForm.js
const handleSubmit = async(e) => { e.preventDefault(); try { //I also tried using only: "/send_mail" here like I have in server.js but it didnt work await axios.post("http://localhost:3000/send_mail", { name }); } catch (error) { console.log(error); } }servidor.js
const express = require("express"); const app = express(); require("dotenv").config(); const bodyParser = require("body-parser"); const cors = require("cors"); const nodemailer = require("nodemailer"); app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); app.use(cors()); app.post("/send_mail", cors(), async (req, res) => { let {text} = req.body; const transport = nodemailer.createTransport({ host: "smtp-mail.outlook.com", port: 587, auth: { user: "someone@hotmail.com", pass: "password" }, tls: { rejectUnauthorized: false } }); await transport.sendMail({ from: "someone@hotmail.com", to: "someone@hotmail.com", subject: "subject", html: `<p>${text}</p>` }) }); app.listen(4000, () => { console.log("Server is listening on port 4000"); });Editar: El error que recibo en el navegador:
¿Hay alguien que pueda ayudarme a resolver este problema? ¡La ayuda sería muy apreciada!
Su servidor está escuchando en el puerto 4000 . // servidor.js
app.listen(4000, () => { console.log("Server is listening on port 4000"); });Debe usar la siguiente URL para la llamada de Axios. // formulario_escolar.js
await axios.post("http://localhost:4000/send_mail", { // use port 4000 not 3000 name });Configuró su servidor para escuchar el puerto 4000 pero su solicitud de axios es para el puerto 3000. Asegúrese de enviar la solicitud al puerto correcto:
await axios.post("http://localhost:4000/send_mail", { name }); También tenga en cuenta que el body-parser está en desuso y debe usar el middleware integrado express . entonces en lugar de:
app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json());Deberías:
app.use(express.urlencoded({extended: true})); app.use(express.json()); y puede eliminar la dependencia body-parser .
Puede leer aquí para obtener más información sobre el middleware integrado Express y sus propiedades opcionales.
EDITAR:
La razón por la que no funcionaba es porque body es un objeto creado por el propio middleware. Por lo tanto req.body no está undefined ya que el objeto del body no existe.