You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React项目登录触发404错误,寻求问题排查与解决建议

登录自研Web应用触发404错误的排查求助

我开发的Web应用在点击登录按钮后返回Error 404错误,提示请求的资源未找到。已反复检查代码与配置,仍无法定位问题根源,附上相关信息恳请提供排查方向与解决建议:

登录触发404错误的截图说明:显示请求资源未找到的404错误页面

背景说明

Web应用支持用户登录功能,当前点击登录按钮后返回404错误,提示请求的资源未找到,自查代码与配置后仍无法定位问题。

代码文件说明

  • auth.routes.js:定义认证相关路由
  • auth.js:封装登录、令牌验证等认证请求函数
  • axios.js:配置Axios HTTP客户端对接后端API
  • app.js:Express应用入口,配置中间件与路由处理
  • App.jsx:React组件,配置应用页面路由(包含登录页)
  • auth.controller.js:处理用户认证逻辑,包括凭证验证与令牌生成

额外配置信息

  • 后端服务地址:http://localhost:4000
  • 前端应用地址:http://localhost:5173

代码片段

auth.routes.js

import { Router } from 'express'
import { login, logout, profile, verifyToken } from '../controllers/auth.controller.js'
import { authRequired } from '../middlewares/validateToken.js'
import { validateSchema } from '../middlewares/validator.middleware.js'
import { loginSchema } from '../schemas/auth.schema.js'

const router = Router()

router.post('/login', validateSchema(loginSchema), login)
router.post('/logout', logout)
router.get("/profile", authRequired, profile)
router.get("/verify", verifyToken)

export default router

auth.js

import axios from './axios.js';

export const loginRequest = user => {
    return axios.post('/login', user)
        .catch(error => {
            console.error("Error al realizar la solicitud POST:", error);
            throw error; // Propaga el error para que pueda ser manejado en el componente que llama a loginRequest
        });
};

export const verifyTokenRequest = () => axios.get('/api/verify');

axios.js

import axios from 'axios';

axios.create({
    baseURL: 'http://localhost:4000/api',
    withCredentials: true
});

export default axios;

app.js

import express from "express";
import morgan from "morgan";
import cookieParser from "cookie-parser";
import cors from "cors";

import authRoutes from './routes/auth.routes.js'
import auditoriaRoutes from './routes/auditoria.routes.js'

const app = express()

app.use(cors({
    origin: "http://localhost:5173",
    credentials: true
}))
app.use(morgan("dev"))
app.use(express.json())
app.use(cookieParser())

app.use('/api', authRoutes);
app.use('/api', auditoriaRoutes);

export default app

App.jsx

import { BrowserRouter, Routes, Route } from 'react-router-dom';
import { AuthProvider } from './context/AuthContext.jsx';

import LoginPage from './pages/LoginPage';
import AuditoriaPage from './pages/AuditoriaPage';
import ProfilePage from './pages/ProfilePage';

import ProtectedRoute from './ProtectedRoute.jsx';

function App() {
  return (
    <AuthProvider>
      <BrowserRouter>
        <Routes>
          <Route path='/login' element={<LoginPage />} />
          <Route element={<ProtectedRoute />} >
            <Route path='/auditoria' element={<AuditoriaPage />} />
            <Route path='/profile' element={<ProfilePage />} />
          </Route>
        </Routes>
      </BrowserRouter >
    </AuthProvider>
  );
}

export default App;

auth.controller.js

import User from '../models/user.model.js'
import bcrypt from 'bcryptjs'
import { createAccessToken } from '../libs/jwt.js'
import jwt from 'jsonwebtoken'
import { TOKEN_SECRET } from '../config.js'

export const login = async (req, res) => {
    const { email, password } = req.body;

    try {
        console.log("Solicitud de inicio de sesión recibida:", email); // Agregar registro de depuración
        const userFound = await User.findOne({ email });

        if (!userFound) {
            console.log("Usuario no encontrado:", email); // Agregar registro de depuración
            return res.status(400).json({ message: "User not found" });
        }

        const isMatch = await bcrypt.compare(password, userFound.password);
        if (!isMatch) {
            console.log("Contraseña incorrecta para el usuario:", email); // Agregar registro de depuración
            return res.status(400).json({ message: "Incorrect email or password" });
        }

        console.log("Inicio de sesión exitoso para el usuario:", email); // Agregar registro de depuración
        const token = await createAccessToken({ id: userFound._id });
        res.cookie('token', token);
        res.json({
            id: userFound._id,
            username: userFound.username,
            email: userFound.email,
        });
    } catch (error) {
        console.error("Error en la función de inicio de sesión:", error); // Agregar registro de error
        res.status(500).json({ message: 'Internal Server Error' });
    }
}

再次感谢各位的帮助!


内容的提问来源于stack exchange,提问作者Víctor Fernández de Mora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:39:52