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.

El cuerpo de la solicitud está vacío.

Estoy haciendo una solicitud desde el frontend de mi proyecto al backend. El frontend es React, el backend es NodeJs. Estoy haciendo esta solicitud:

axios.get("http://localhost:5050/user/verify-user", {email:l.email, password:l.password})
.then(res => console.log(res))

Y este es el código de la función de Node que debería manejarla:

const verifyUser = (req, res) => {
    console.log(req.body)
    const email = req.body.email;
    const password = req.body.password;
    console.log(email, password)

User.findOne({ email:email})
    .then(user => {
        if(!user){
            res.json('User not registered');
        }else if(user.password != password){
            res.json('Uncorrect password');
        }else{
            res.json('Verified');
        }
    })
    .catch(err => res.status(400).json("ERROR:"+err))
}

Pero la declaración de inicio de console siempre devuelve undefined, por lo que la salida de la solicitud es siempre ‘User not registered’. Si hago la misma solicitud desde Postman, funciona correctamente. Leí algunas respuestas que indican que podría ser un problema de formato. Si lo registro en la consola, dice que es un objeto. De todos modos, aquí está el código del servidor:

const express = require('express');
const morgan = require('morgan');
const cors = require('cors');
const mongoose = require('mongoose');
const bodyParser = require('body-parser')

require('dotenv').config();

const app = express();
const port = process.env.port || 5050;

app.use(morgan('dev'));

app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended:true }));

const uri = process.env.ATLAS_URI;
mongoose.connect(uri, {useNewUrlParser:true});

const connection = mongoose.connection;
connection.once('open', () => console.log('Connected'));

const fileRouter = require('./routes/fileRoutes');
const userRouter = require('./routes/userRoutes');
const groupRouter = require('./routes/groupRoutes');
const extensionRouter = require('./routes/extensionRoutes');
const chatGRouter = require('./routes/chatGRoutes');

app.use('/file', fileRouter);
app.use('/user', userRouter);
app.use('/group', groupRouter);
app.use('/ext', extensionRouter);
app.use('/chat', chatGRouter);

app.listen(port, () => {console.log(`Server listening on port ${port}`)});

No sé por qué no funciona. Si alguien sabe, por favor ayúdeme.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema podría ser que la solicitud del frontend no está enviando los datos en el formato correcto. El backend espera que esté en forma de un objeto JSON en el cuerpo de la solicitud. Para asegurarse de que los datos se envíen correctamente, intente cambiar el código de solicitud a:

    axios.post("http://localhost:5050/user/verify-user", {email: l.email, password: l.password})
                .then(res => console.log(res))
    

    Tenga en cuenta que el método se ha cambiado de .get() a .post(), y los datos ahora se envían en el cuerpo de la solicitud como un objeto JSON.

    Además, asegúrese de incluir el middleware body-parser en el archivo del servidor. Este middleware se utiliza para analizar el cuerpo de la solicitud y ponerlo a disposición en el objeto req.body. Agregue esta línea de código al archivo del servidor:

    app.use(bodyParser.json())
    

    Esto debería permitir que el servidor reciba correctamente los datos en el formato correcto y devuelva la respuesta correcta.

Comments are closed.