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

React用Express获取MySQL用户数据报404,如何在react-material-dashboard展示用户列表

问题排查

404报错和后续隐藏的问题共3处:

  • Express路由路径缺少前置斜杠,你当前服务端写的是app.get("api/fetchUsers"),没有斜杠的话Express不会匹配到/api/fetchUsers的请求,直接返回404。
  • 数据库查询回调参数定义错误,db.query的回调第一个参数是错误对象err,第二个是查询结果result,你现在写成了(req, res),和外层路由的req/res重名,且未定义err和result,就算路由通了也会报错。
  • 若前端和服务端端口不一致,需要提前配置cors跨域中间件,否则请求会被浏览器拦截。

修复步骤

1. 修复服务端API代码

先执行npm install cors安装跨域中间件,再替换服务端代码:

const cors = require('cors');
app.use(cors()); // 放在所有路由前面开启跨域

//API To Get All Users
app.get("/api/fetchUsers", (req, res) => {
    db.query("SELECT * FROM users", (err, result) => {
        if (err){
            console.log(err)
            res.status(500).send('查询数据库失败')
        }else{
            console.log(result);
            res.send(result)
        }
    });
});

改完重启Express服务。

2. 修复前端代码,渲染用户数据到表格

你当前只发起了请求没有存数据,也没有写表体渲染逻辑,修改CustomersListResults.js:

import { useState, useEffect } from 'react';
import PerfectScrollbar from 'react-perfect-scrollbar';
import {
  Box,
  Card,
  Table,
  TableBody,
  TableCell,
  TableHead,
  TablePagination,
  TableRow,
} from '@material-ui/core';
import Axios from 'axios';

const CustomerListResults = () => {
  const [limit, setLimit] = useState(10);
  const [page, setPage] = useState(0);
  const [userList, setUserList] = useState([]); // 新增用户列表存储state

  useEffect(() => {
    Axios.get('http://localhost:3001/api/fetchUsers').then((response) => {
      setUserList(response.data); // 存储返回的用户数据
    }).catch(err => {
      console.log('请求用户数据失败', err)
    })
  }, []);

  const handleLimitChange = (event) => {
    setLimit(event.target.value);
  };

  const handlePageChange = (event, newPage) => {
    setPage(newPage);
  };

  return (
    <Card>
      <PerfectScrollbar>
        <Box sx={{ minWidth: 1050 }}>
          <Table>
            <TableHead>
              <TableRow>
                <TableCell>Account</TableCell>
                <TableCell>Name</TableCell>
                <TableCell>Email</TableCell>
                <TableCell>Location</TableCell>
                <TableCell>Phone</TableCell>
                <TableCell>Registration date</TableCell>
                <TableCell>Action</TableCell>
              </TableRow>
            </TableHead>
            {/* 新增表体渲染逻辑 */}
            <TableBody>
              {userList.slice(page * limit, page * limit + limit).map((user) => (
                <TableRow hover key={user.id}>
                  {/* 字段名和你数据库users表的字段保持一致即可,不匹配对应修改 */}
                  <TableCell>{user.account}</TableCell>
                  <TableCell>{user.name}</TableCell>
                  <TableCell>{user.email}</TableCell>
                  <TableCell>{user.location}</TableCell>
                  <TableCell>{user.phone}</TableCell>
                  <TableCell>{user.registration_date}</TableCell>
                  <TableCell>{/* 这里可新增编辑、删除等操作按钮 */}</TableCell>
                </TableRow>
              ))}
            </TableBody>
          </Table>
        </Box>
      </PerfectScrollbar>
      <TablePagination
        component="div"
        count={userList.length} // 分页总长度替换为实际用户数量
        onPageChange={handlePageChange}
        onRowsPerPageChange={handleLimitChange}
        page={page}
        rowsPerPage={limit}
        rowsPerPageOptions={[5, 10, 25]}
      />
    </Card>
  );
};

export default CustomerListResults;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:57:03