axios post request в наборе инструментов create async thunk redux работает в разработке, но выдает ошибку 504 в производстве на vercel next js

Запрос POST axios в createAsyncThunk отлично работает при разработке, но когда я развертываю сеть на Vercel, он ждет несколько секунд, а затем выдает ответ 504. Вот ответ на производство:

      Promise {<pending>, requestId: 'nWTIWtmH2NZYeQlP9E_d-', arg: {…}, abort: ƒ, …}abort: ƒ (a)arg: {username: 'hassan', password: 'admin'}requestId: "nWTIWtmH2NZYeQlP9E_d-"unwrap: ƒ ()[[Prototype]]: Promisecatch: ƒ catch()constructor: ƒ Promise()finally: ƒ finally()then: ƒ then()Symbol(Symbol.toStringTag): "Promise"[[Prototype]]: Object[[PromiseState]]: "pending"[[PromiseResult]]: undefined        
POST https://crvsdash.vercel.app/api/adminlogin 504

Я пробовал много вещей, таких как размещение заголовков разрешения перекрестного происхождения, URL-адрес прокси-сервера в пакете JSON, но я не могу понять, почему он не работает в производстве, но отлично работает в разработке. Вот фрагмент инструментов Redux для отправки запроса:

      import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
import axios from 'axios';

const initialState = {
  admin: null,
};

export const validateAdmin = createAsyncThunk(
  'Admin/validateAdmin',
  async (initialCred) => {
    console.log(initialCred);
    return await axios
      .post('/api/adminlogin', {
        method: 'POST',
        data: initialCred,
      })
      .then((res) => res.data);
  }
);
const adminSlice = createSlice({
  name: 'Admin',
  initialState,
  extraReducers: (builder) => {
    builder.addCase(validateAdmin.fulfilled, (state, action) => {
      state.admin = action.payload;
    });
  },
});

export default adminSlice.reducer;

Вот API, который я получаю (следующий API)

      import Admin from '../../models/Admin/Admin';
import connectDB from '../../middleware/mongoose';
var CryptoJS = require('crypto-js');
var jwt = require('jsonwebtoken');

const handler = async (req, res) => {
  if (req.method == 'POST') {
    console.log(req.body);
    const admin_user = await Admin.findOne({
      username: req.body.data.username,
    });
    if (admin_user) {
      const bytes = CryptoJS.AES.decrypt(
        admin_user.password,
        process.env.AES_SECRET
      );
      let decryptedPass = bytes.toString(CryptoJS.enc.Utf8);
      if (
        req.body.data.username == admin_user.username &&
        req.body.data.password == decryptedPass
      ) {
        var token = jwt.sign(
          {
            username: admin_user.username,
          },
          process.env.JWT_SECRET,
          {
            expiresIn: '10d',
          }
        );
        res.status(200).json({ success: true, token });
      } else {
        res.status(200).json({
          success: false,
          message: 'Invalid Credentials. Please Try Again.',
        });
      }
    } else {
      res.status(200).json({
        success: false,
        message: `No User Registered with ${req.body.data.username}`,
      });
    }
  } else {
    res.status(200).json({ message: 'This method is not allowed' });
  }
};

export default connectDB(handler);

Учетные данные тела из формы поступают в преобразователь asnync, но у него есть сложности с отправкой запроса. вот отправка, которую я делаю в своей форме:

        const [username, setUsername] = useState('');
  const [password, setPassword] = useState('');
  const [passwordVisibility, setPasswordVisibility] = useState(false);
  const handleChange = (e) => {
    if (e.target.name == 'username') {
      setUsername(e.target.value);
    } else if (e.target.name == 'password') {
      setPassword(e.target.value);
    }
  };
  const dispatch = useDispatch();
  const handleSubmit = async (e) => {
    e.preventDefault();
    dispatch(validateAdmin({ username, password }));
  };
  const admin = useSelector((state) => state.admin.admin);
  console.log(admin);

Я пробовал много вещей, но все еще не удалось. Главное, на хероку тоже не заработало. Каждая переменная env введена правильно, я тоже дважды проверил их. И он также отправляет прекрасный запрос в почтальон или Thunderclient.

0 ответов

Другие вопросы по тегам