Creé un formulario de contacto para mi aplicación de reacción que funciona en localhost pero una vez que lo implemento ya no funciona. He estado probando diferentes URL para la publicación, con o sin puerto, pero cada vez arroja un error.
Tal como está ahora, obtengo esto en la consola:
Error: la solicitud falló con el código de estado 404 en e.exports (createError.js:16) en e.exports (settle.js:17) en XMLHttpRequest.x (xhr.js:66)
Así envío el correo:
axios({ method: 'POST', url: 'https://url.com/send', data: formData }).then((response) => { if (response.data.status === 'success') { toast.success( <div> Success </div> ); resetForm(); } else if (response.data.status === 'fail') { toast.error( <div> Error </div> ); } });Este es mi servidor:
var express = require('express'); var cors = require('cors'); var router = express.Router(); var nodemailer = require('nodemailer'); app.use(express.static('build')); app.get('*', (req, res) => { req.sendFile(path.resolve(__dirname, 'build', 'index.html')); }); var transport = { service: 'gmail', auth: { user: 'my_email@gmail.com', pass: 'my_password' } }; var transporter = nodemailer.createTransport(transport); transporter.verify((error, success) => { if (error) { console.log(error); } else { console.log('Server is ready to take messages'); } }); router.post('/send', (req, res, next) => { var firstName = req.body.firstName; var lastName = req.body.lastName; var email = req.body.email; var phoneNumber = req.body.phoneNumber; var subject = req.body.subject; var message = req.body.message; var dataConsent = req.body.dataConsent; var content = `Name:\n${ firstName + ' ' + lastName }\n\n\nEmail:\n${email}\n\n\nPhone Number:\n${phoneNumber}\n\n\nSubject:\n${subject}\n\n\nMessage:\n${message}\n\n\nConsent:\n${dataConsent}`; var mail = { from: email, to: 'test@gmail.com', subject: subject, text: content }; transporter.sendMail(mail, (err, data) => { if (err) { res.json({ status: 'fail' }); } else { res.json({ status: 'success' }); } }); }); const app = express(); app.use(cors()); app.use(express.json()); app.use('/', router); app.listen(3002);Y en package.json ejecuto este script al inicio:
"start": "node src/server.js",var express = require('express'); const app = express(); // app comes after express require var cors = require('cors'); var router = express.Router(); var nodemailer = require('nodemailer'); app.use(express.static('build')); app.get('*', (req, res) => { req.sendFile(path.resolve(__dirname, 'build', 'index.html')); }); var transport = { service: 'gmail', auth: { user: 'my_email@gmail.com', pass: 'my_password', }, }; var transporter = nodemailer.createTransport(transport); transporter.verify((error, success) => { if (error) { console.log(error.message); } else { console.log('Server is ready to take messages'); } }); router.post('/contact',async (req, res, next) => { var firstName = req.body.firstName; var lastName = req.body.lastName; var email = req.body.email; var phoneNumber = req.body.phoneNumber; var subject = req.body.subject; var message = req.body.message; var dataConsent = req.body.dataConsent; var content = `Name:\n${ firstName + ' ' + lastName }\n\n\nEmail:\n${email}\n\n\nPhone Number:\n${phoneNumber}\n\n\nSubject:\n${subject}\n\n\nMessage:\n${message}\n\n\nConsent:\n${dataConsent}`; var mail = { from: email, to: 'test@gmail.com', subject: subject, text: content, }; const info = await transporter.sendMail(mail); return res.send({info}); }); // const app = express(); app is executed in wrong place app.use(cors()); app.use(express.json()); app.use('/', router); app.listen(3002); Ha cometido errores este archivo. const app = express(); viene después de var express = require('express');