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

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

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