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

使用Axios与TanStack useQuery调用Express API时404错误的解决及示例

404错误排查与Express+Axios+TanStack Query对接示例

问题概述

使用Axios和TanStack useQuery调用Express后端API时触发404 Not Found错误。后端通过MySQL获取数据的getCourses函数逻辑正常,用Insomnia发送POST请求能正常响应,但前端GET请求失败。

错误排查步骤

1. 修正Axios实例配置的错误

你的Axios实例配置存在两处关键问题:

  • 硬编码了method: "GET"和url: "requisitions",导致后续调用get("/courses")时,最终请求URL会拼接成http://localhost:8800/api/requisitions/courses,与后端实际路由不匹配
  • headers格式错误,应该是对象而非数组,且Access-Control-Allow-Origin是后端CORS配置的响应头,不需要在前端请求头中设置

2. 确认后端路由的HTTP方法匹配

你提到Insomnia用POST请求能成功,但getCourses函数应该对应GET路由。需要确保courseRoutes中是用app.get而非app.post来绑定该函数。

3. 验证最终请求URL

在浏览器开发者工具的Network面板中查看实际发送的请求URL,确认是否为http://localhost:8800/api/courses,排除路径拼接错误。

正确代码示例

修正后的Axios实例配置

import axios from "axios";

export const makeRequest = axios.create({
  baseURL: "http://localhost:8800/api/",
  withCredentials: true,
});

前端TanStack useQuery请求代码

import { useQuery } from "@tanstack/react-query";
import { makeRequest } from "./path-to-your-axios-instance";

const { isLoading, error, data } = useQuery({
  queryKey: ["courses"],
  queryFn: async () => {
    const res = await makeRequest.get("/courses");
    return res.data;
  },
});

后端courseRoutes路由配置示例

import express from "express";
import { getCourses } from "../path-to-your-controller";

const router = express.Router();

// 确保使用GET方法绑定getCourses函数
router.get("/", getCourses);

export default router;

后端主文件index.js(无需修改,确认路由挂载正确)

import express from "express";
import userRoutes from "./routes/users.js";
import authRoutes from "./routes/auth.js";
import courseRoutes from "./routes/courses.js";
import cookieParser from "cookie-parser";
import cors from "cors";

const app = express();

app.use(express.json());
app.use(cors({ origin: "http://localhost:3000", methods: ["GET", "POST"], credentials: true }));
app.use(cookieParser());

app.use("/api/auth", authRoutes);
app.use("/api/users", userRoutes);
app.use("/api/courses", courseRoutes);

app.listen(8800, () => {
  console.log("API connected");
});

后端getCourses函数(逻辑正常,无需修改)

export const getCourses = (req, res) => {
  const q = `SELECT c.*, u.id AS teacherId FROM courses AS c JOIN users AS u ON (u.id = c.teacherId)`;

  db.query(q, (err, data) => {
    if (err) return res.status(500).json(err);
    return res.status(200).json(data);
  });
};

内容的提问来源于stack exchange,提问作者Tadashi Haneda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:20:14