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

React调用MongoDB后端API出现404错误求助

React前端调用后端API返回404错误的解决建议

问题概述

React应用调用后端MongoDB的/api/jobs接口时收到404 Not Found错误,但Postman测试该接口可正常返回数据,后端路由已配置完成。

相关代码

App.js(前端)

useEffect(() => {
  async function fetchJobs() {
    try {
      const response = await axios.get('/api/jobs');
      setJobs(response.data);
    } catch (error) {
      console.error('Error fetching jobs:', error);
    }
  }
  fetchJobs();
}, []);

index.js(后端)

const jobRoutes = require('./routes/jobRoutes');
const express = require('express')
const cors = require('cors');
const mongoose = require('mongoose')

const app = express()
app.use(cors())

const PORT = process.env.PORT || 8080

mongoose.connect("mongodb://localhost:27017/joblistingDB",{ useNewUrlParser: true, useUnifiedTopology: true })
.then(() => {
    console.log("connected to db")
    app.listen(PORT,()=>{
        console.log("listening");
    })
})
.catch((err)=> console.log(err))

//Middleware
app.use(express.json());

// Routes
app.use('/api', jobRoutes);

jobRoutes.js(后端)

const express = require('express');
const router = express.Router();
const jobController = require('../Controllers/jobController');
const Job = require('../models/job');

// Define routes for job listings
// router.get('/jobs', jobController.getAllJobs);

Route to get all jobs
router.get('/jobs', async (req, res) => {
    try {
      const jobs = await Job.find();
      console.log("Fetched in backend successfully");
      res.json(jobs);
    } catch (error) {   
      res.status(500).json({ message: error.message });
    }
  });

解决建议

1. 修复后端路由文件的语法错误

jobRoutes.js中存在未注释的普通文本Route to get all jobs,这会导致Node.js解析路由模块失败,直接造成/api/jobs接口不存在。将该行改为注释:

// Route to get all jobs

修改后重启后端服务,再测试前端请求。

2. 确保前端请求地址正确

React开发环境默认会把相对路径/api/jobs指向前端服务端口(通常是3000),而非后端的8080端口。解决方式二选一:

  • 直接使用完整URL请求:修改App.js中的请求地址
    const response = await axios.get('http://localhost:8080/api/jobs');
    
  • 配置代理转发:在React项目的package.json中添加代理配置,重启前端服务后相对路径会自动转发到后端
    "proxy": "http://localhost:8080"
    

3. 确认后端路由加载顺序

确保后端路由在服务器启动前已正确挂载:当前后端代码中app.use('/api', jobRoutes)在app.listen之前执行,这部分是正确的,但如果修改过代码结构,需保证路由中间件在express.json()等必要中间件之后、app.listen()之前加载。

4. 验证CORS配置有效性

虽然已启用app.use(cors()),但可检查是否存在特定Origin限制,或是否在路由之后才加载CORS中间件(当前代码中CORS中间件在最前面,无需调整)。若前端部署在不同域名,可明确指定允许的Origin:

app.use(cors({ origin: "http://localhost:3000" }));

内容的提问来源于stack exchange,提问作者veshala likhitha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:23:19