首页 > 解决方案 > 错误:网络错误:使用 axios.put 方法多次请求服务器 net::ERR_TOO_MANY_REDIRECTS

问题描述

我在尝试进行 api 调用 put 方法请求时收到错误 net::ERR_TOO_MANY_REDIRECTS...

我想做的事情很容易理解,我只是想在用户单击他通过电子邮件获得的链接时执行验证电子邮件...

但是,每当用户单击链接时,页面都无法到达端点以更新用户数据...

在此处输入图像描述

这是我server.js在下面的文件

import path from 'path';
import express from 'express';
import dotenv from 'dotenv';
import colors from 'colors';
import morgan from 'morgan';
import connectDB from './config/db.js';
import bodyParser from 'body-parser';
import exphbs from 'express-handlebars';
import investmentRoutes from './routes/investmentRoutes.js';
import userRoutes from './routes/userRoutes.js';
import cors from 'cors';

dotenv.config();

connectDB();
const app = express();

//View engine setup

app.engine('handlebars', exphbs());
app.set('view engine', 'handlebars');

//Body parser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
const __dirname = path.resolve();
// Static Folder
app.use('/public', express.static(path.join(__dirname, 'public')));

if (process.env.NODE_ENV === 'development') {
  app.use(morgan('dev'));
}
app.use(express.json()); // in order to parse JSON data
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', '*');
  res.header('Access-Control-Allow-Credentials', true);
  res.header(
    'Access-Control-Allow-Headers',
    'Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers'
  );

  app.use(cors({ credentials: true, origin: true }));
  next();
});
app.options('*', cors());
app.use('/api/investments', investmentRoutes);
app.use('/api/users', userRoutes);

// app.use('/api/uploads', uploadRoutes);

app.use('/uploads', express.static(path.join(__dirname, '/uploads')));

if (process.env.NODE_ENV === 'production') {
  app.use(express.static(path.join(__dirname, '/frontend/build')));
  app.get('*', (req, res) =>
    res.sendFile(path.resolve(__dirname, 'fronted', 'build', 'index.html'))
  );
} else {
  app.get('/', (req, res) => {
    res.send('API is running...');
  });
}
const PORT = process.env.PORT || 5000;
app.listen(
  PORT,
  console.log(
    `Server running in ${process.env.NODE_ENV} mode on port ${PORT}`.bold.yellow
  )
);

我的路线如下:

import express from 'express';
const router = express.Router();

import {
  authUser,
  registerUser,
  getUserProfile,
  getUservalidated,
} from '../controllers/userController.js';
import { protect } from '../middleware/authMiddleware.js';

router.route('/').post(registerUser);
router.route('/verify/users/:token').put(getUservalidated);
router.post('/login', authUser);
router.route('/profile').get(protect, getUserProfile);

export default router;

我的功能是让用户得到验证

const getUservalidated = asyncHandler(async (req, res) => {
  const emailToken = req.params.token;
  const userInfo = jwt.decode(emailToken);
  const now = new Date();
  if (now.getTime() <= userInfo.exp * 1000) {
    const user = await User.findById(userInfo.id);
    if (user) {
      try {
        user.isValidated = true;
        const userUpdated = await user.save();
        console.log(userUpdated);
        res.status(201).json(userUpdated);
      } catch (error) {
        res.status(500).json(error.message);
      }
    }
  }
});

当用户单击要重定向的电子邮件上的链接时调用我的反应文件...

import axios from 'axios';
import React from 'react';
import { useHistory } from 'react-router-dom';

const Verify = ({ location }) => {
  const history = useHistory();
  const getDataVerified = async () => {
    const emailToken = location.pathname.replace('/verify/users/', '');

    const config = {
      headers: {
        'Content-Type': 'application/json; charset=UTF-8',
        Accept: 'application/json',
      },
    };
    const address = `/api/users/verify/${emailToken}`;
    console.log(address);
    await axios
      .put(address, { localStorageToken: emailToken }, config)
      .then((res) => {
        console.log(res);
        history.push('/admin/dashboard');
      })
      .catch((error) => console.log(error));
  };
  getDataVerified();
  return <></>;
};

export default Verify;

标签: javascriptaxiosruntime-errorput

解决方案


推荐阅读