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

275
Vistas
React node js contact form error 404 in production

I've made a contact form for my react app that works on localhost but once I deploy it doesn't work anymore. Been trying different url for post, with or without port but each time it throws an error.

As it is now I get this in the console:

Error: Request failed with status code 404 at e.exports (createError.js:16) at e.exports (settle.js:17) at XMLHttpRequest.x (xhr.js:66)

This is how I submit the mail:

        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>
                );
            }
        });

This is my server:

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);

And in package.json I run this script on start:

    "start": "node src/server.js",
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

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);

You have made mistakes this file. const app = express(); comes after var express = require('express');

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