Axios POST kembali selepas panggilan API: ERR_EMPTY_RESPONSE
P粉014218124
P粉014218124 2024-04-03 14:16:50
0
1
406

Saya cuba membuat borang pendaftaran dalam aplikasi Node.JS.

Apabila saya membuat permintaan siaran AXIOS, data disimpan ke pangkalan data saya, tetapi janji sebenar masih kembali tidak ditentukan. Muatan diisi dengan betul. Untuk membuat perkara lebih mengelirukan, saya pada dasarnya telah mencerminkan kod log masuk saya dalam fungsi dan ia berfungsi dengan sempurna.

Kod di bawah digunakan untuk mendaftar.

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

Ini adalah penghala pengguna saya yang terletak di 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);

Ini ialah Pengawal auth saya dengan fungsi pendaftaran.

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

Terima kasih banyak-banyak.

Pada pendapat saya, memandangkan pengawal pengesahan saya menghantar respons 201, ini tidak sepatutnya berlaku.

P粉014218124
P粉014218124

membalas semua(1)
P粉268654873

Kaedah

then() tidak mengembalikan Janji yang ditunggu, sebaliknya mengambil fungsi panggil balik yang akan dilaksanakan apabila permintaan selesai. Anda perlu menukar ini:

 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.

Masuk di sini:

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);
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!