es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error 500 – Servidor: Al usar expressjs para cargar el registro de usuario, no puedo determinar qué está causando este error al manejarlo con express.Router.

Estoy usando .env para conectarme a MYSQL y la conexión funciona bien. Mis vistas también funcionan, pero el router.post …, no funciona. Se trata de una aplicación de registro y inicio de sesión simple que estoy tratando de crear. Lo hice de manera diferente con todas las consultas de base de datos en el archivo app.js que funcionó bien. Pero con esta configuración de convención, no funciona. El problema está con la consulta de base de datos en la función express.router auth.js está en una carpeta: routes/auth.js, solo tengo dos archivos, el app.js y el auth.js

app.js
“`
var express = require(‘express’);
var handlebars = require(‘express-handlebars’).create({ defaultLayout: ‘main’ });
var dotenv = require(‘dotenv’);
var bodyParser = require(‘body-parser’);
var fileUpload = require(‘express-fileupload’);
var route = require(‘./routes/auth’);
var app = express();

//deshabilitar la respuesta de encabezado de metadatos
app.disable(‘x-powered-by’);

//configuración de la plantilla de la aplicación
app.engine(‘handlebars’, handlebars.engine);
app.set(‘view engine’, ‘handlebars’);

//configuración de recursos estáticos
app.use(express.static(__dirname + ‘/public’));

//modulación de enrutamiento
app.use(‘/’, route);
app.use(‘about’, route);
app.use(‘login’, route);
app.use(‘register’, route);
app.use(‘upload’, route);

//configuración de carga de archivos
app.use(fileUpload());
app.use(express.static(‘upload’));

//para la codificación
app.use(bodyParser.urlencoded({ extended: false }));

//puerto de la aplicación para ver
app.set(‘port’, process.env.PORT || 3000);

//página 404 personalizada
app.use((req, res, next) => {
res.status(404);
res.render(‘404’);
});

//página 500 personalizada
app.use((err, req, res, next) => {
res.status(500);
res.render(‘500’);
});

app.listen(app.get(‘port’), (req, res) => {
console.log(‘Express started on localhost:’ +
app.get(‘port’) + ‘; presione Ctrl-C para terminar.’);
});

module.exports = app;

auth.js: para manejar la consulta a MYSQL
var express = require(‘express’);
var bcrypt = require(‘bcrypt’);
var fortune = require(‘../lib/fortune’);
var db = require(‘../controllers/database’);
var router = express.Router();

//definir la ruta de la página de inicio
router.get(‘/’, (req, res) => {
res.render(‘home’);
});

//ruta de la página Acerca de
router.get(‘/about’, (req, res) => {
res.render(‘about’, { fortune: fortune.getFortune });
});

//ruta de la página de registro de middleware
router.get(‘/register’, (req, res) => {
res.render(‘register’);
});

router.post(‘/register’, (req, res) => {

var { firstName, lastName, email, password, passwordConfirm } = req.body;

db.query(‘SELECT email FROM registration WHERE email = ?’, [email], (error, results) => {
if (error) {
console.log(error);
}

if (results.length > 0) {
    return res.render('register', {
        message: 'Ese correo electrónico ya está en uso'
    })
}
else if (password !== passwordConfirm) {
    return res.render('register', {
        message: 'Las contraseñas no coinciden'
    })
}

});

let hashedPwd = bcrypt.hash(password, 10);
console.log(hashedPwd);

db.query(‘INSERT INTO registration SET ? ‘, { firstName: firstName, lastName: lastName, email: email, password: hashedPwd }, (error, results) => {
if (error) {
console.log(error);
} else {
console.log(results);
return res.render(‘register’, {
message: ‘Usuario registrado’
});
}
});
});

router.get(‘/login’, (req, res) => {
res.render(‘login’);
});

module.exports = router;

register.handlebars






{{#if message}}

{{message}}

{{/if}}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está con la consulta de base de datos en la función express.router de auth.js. El formulario de registro envía datos mediante una solicitud POST a la ruta /register que es manejada por la función router.post en auth.js. Sin embargo, las consultas de base de datos en esta función no se ejecutan correctamente.

    Una posible razón podría ser que las funciones de consulta son asíncronas y la solicitud POST se completa antes de que se ejecuten las consultas. Para asegurarse de que las consultas se ejecuten antes de enviar la respuesta, el código se puede modificar para utilizar promesas o funciones de devolución de llamada.

    Otro problema podría ser con la sintaxis de las consultas en sí mismas. Sería útil registrar cualquier error que ocurra en las funciones de consulta para comprender y depurar mejor el problema.

    También es importante verificar que el archivo .env esté configurado correctamente y que la conexión a la base de datos MySQL sea exitosa. Puede ser útil console.log el objeto de conexión de base de datos para asegurarse de que esté correctamente inicializado.

    En general, es necesario realizar una depuración y prueba exhaustivas para identificar y solucionar el problema con la función router.post en auth.js.

Comments are closed.