Maison  >  Questions et réponses  >  le corps du texte

Axios POST renvoie après l'appel de l'API : ERR_EMPTY_RESPONSE

J'essaie de créer un formulaire d'inscription dans une application Node.JS.

Lorsque je fais une demande de publication AXIOS, les données sont enregistrées dans ma base de données, mais la promesse réelle reste toujours indéfinie. La charge utile est correctement renseignée. Pour rendre les choses encore plus confuses, j'ai essentiellement reflété mon code de connexion dans la fonction et cela fonctionne parfaitement.

Le code ci-dessous permet de s'inscrire.

import axios from 'axios';
import { showAlert } from './alerts';

export const signup = async (name, email, password, passwordConfirm) => {
  try {
    const res = await axios({
      method: 'POST',
      url: 'http://127.0.0.1:3000/api/v1/users/signup',
      data: {
        name,
        email,
        password,
        passwordConfirm,
      },
    }) // res returns undefined.

    if (res.data.status === 'success') {
      showAlert('success', 'Signed up successfully!');
      window.setTimeout(() => {
        location.assign('/login');
      }, 1500);
    }
  } catch (err) {
    showAlert('error', err.response.data.message);
  }
};

Voici mon routeur utilisateur situé à l'adresse http://127.0.0.1:3000/api/v1/users

const authController = require('./../controllers/authController');
// const reviewController = require('./../controllers/reviewController');

const router = express.Router();

router.post('/signup', authController.signup);

C'est mon authController avec fonction d'enregistrement.

const signToken = (id) => {
  return jwt.sign({ id: id }, process.env.JWT_SECRET, {
    expiresIn: process.env.JWT_EXPIRES_IN,
  });
};

const createSendToken = (user, statusCode, res) => {
  const token = signToken(user._id);
  const cookieOptions = {
    expires: new Date(
      Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
    ),
    httpOnly: true,
  };

  if (process.env.NODE_ENV === 'production') cookieOptions.secure = true;

  res.cookie('jwt', token, cookieOptions);

  // Remove password from output
  user.password = undefined;

  res.status(statusCode).json({
    status: 'success',
    token,
    data: {
      user,
    },
  });
};

exports.signup = catchAsync(async (req, res, next) => {
  const newUser = await User.create({
    name: req.body.name,
    email: req.body.email,
    password: req.body.password,
    passwordConfirm: req.body.passwordConfirm,
    passwordChangedAt: req.body.passwordChangedAt,
    role: req.body.role,
  });
  const url = `${req.protocol}://${req.get('host')}/me`;
  await new Email(newUser, url).sendWelcome();

  createSendToken(newUser, 201, res);
});

Merci beaucoup.

À mon avis, puisque mon contrôleur d'authentification envoie une réponse 201, cela ne devrait pas arriver.

P粉014218124P粉014218124180 Il y a quelques jours412

répondre à tous(1)je répondrai

  • P粉268654873

    P粉2686548732024-04-04 10:37:45

    La méthode

    then() ne renvoie pas de promesse attendue, mais prend à la place une fonction de rappel qui sera exécutée une fois la requête terminée. Vous devez changer ceci :

     const res = await axios({
          method: 'POST',
          url: 'http://127.0.0.1:3000/api/v1/users/signup',
          data: {
            name,
            email,
            password,
            passwordConfirm,
          },
        }).then(console.log('hello world', res, 'hello')); // res returns undefined.

    Entrez ici :

    const res = await axios({
      method: 'POST',
      url: 'http://127.0.0.1:3000/api/v1/users/signup',
      data: {
        name,
        email,
        password,
        passwordConfirm,
      },
    });
    
    console.log('hello world', res, 'hello'); 
    
    if (res.data.status === 'success') {
      showAlert('success', 'Signed up successfully!');
      window.setTimeout(() => {
        location.assign('/login');
      }, 1500);
    }

    répondre
    0
  • Annulerrépondre