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

React+MongoDB开发团队列表,新增列表展示后创建团队报错

问题描述

我使用React JS与MongoDB开发团队列表功能,此前已实现将团队名称提交至MongoDB数据库的功能。现在希望在提交团队名称的同一UI页面展示团队名称列表,于是创建了TeamList.js组件并修改了UI页面Team.js,但提交团队时弹出“Error in creating the team”错误,无法定位问题。


相关代码

TeamList.js

import React from 'react';

function TeamList({ teams }) {
  return (
    <div>
      <h3>Team List</h3>
      <ul>
        {teams.map((team) => (
          <li key={team._id}>{team.team_name}</li>
        ))}
      </ul>
    </div>
  );
}

export default TeamList;

Team.js

import React, { useState, useEffect } from 'react';
import 'bootstrap/dist/css/bootstrap.css';
import axios from 'axios';
import TeamList from './TeamList';

export default function Team({ setActive }) {
  const [teamValues, setTeamValues] = useState({
    team_name: '',
  });

  const [teams, setTeams] = useState([]);

  useEffect(() => {
    axios
      .get('http://localhost:9000/getTeams')
      .then((response) => {
        setTeams(response.data);
      })
      .catch((error) => {
        console.log(error);
      });
  }, []);

  const handleChange = (event) => {
    setTeamValues({ ...teamValues, [event.target.name]: event.target.value });
  };

  const handleSubmit = (event) => {
    event.preventDefault();

    axios
      .post('http://localhost:9000/createTeam', teamValues)
      .then((res) => {
        if (res.data) {
          alert('Team creation Successful');
        }
      })
      .catch((err) => {
        alert('Error in creating the team');
      });
  };

  return (
    <div className="container mt-5">
      <div className="row justify-content-center">
        <div className="col-md-6 col-lg-4">
          <div className="card">
            <div className="card-body">
              <h2 className="card-title">Create a New Team</h2>
              <form onSubmit={handleSubmit}>
                <div className="form-group">
                  <label>Team Name:</label>
                  <input
                    type="text"
                    className="form-control"
                    name="team_name"
                    value={teamValues.team_name}
                    onChange={handleChange}
                  />
                </div>

                <button type="submit" className="btn btn-primary btn-block">
                  Create Team
                </button>
              </form>
            </div>
          </div>
          <p className="mt-3 text-center">
            <a href="/TeamRoster" className="Team_Roster">
              create a team roster
            </a>
          </p>
        </div>
      </div>

      <TeamList teams={teams} />
    </div>
  );
}

排查与解决步骤

1. 打印详细错误信息

当前的错误提示过于笼统,修改handleSubmit中的catch块,输出具体错误详情:

.catch((err) => {
  console.error('创建团队错误详情:', err.response?.data || err.message);
  alert(`创建团队失败: ${err.response?.data?.message || err.message}`);
});

打开浏览器控制台(F12),查看错误的具体类型,比如跨域问题、后端接口不存在、数据库校验失败等。

2. 验证后端接口可用性

  • 用Postman或类似工具直接调用POST http://localhost:9000/createTeam接口,携带team_name参数,确认接口是否能正常创建团队。
  • 检查后端是否配置了CORS:如果前后端端口不同,后端必须允许前端域名的跨域请求,否则会触发跨域错误。
  • 确认MongoDB服务是否正常运行,后端数据库连接配置是否正确,是否有写入权限。

3. 检查请求数据格式

在handleSubmit中添加日志,确认发送的数据是否符合后端要求:

const handleSubmit = (event) => {
  event.preventDefault();
  console.log('发送的团队数据:', teamValues); // 查看数据是否包含正确的team_name字段
  // 后续axios请求代码...
};

确认team_name字段不为空,且格式符合后端的校验规则(比如长度限制、是否允许特殊字符等)。

4. 修复列表自动刷新问题(可选)

当前提交成功后团队列表不会自动更新,可在then块中手动更新状态:

.then((res) => {
  alert('Team creation Successful');
  // 将新创建的团队添加到列表中
  setTeams(prevTeams => [...prevTeams, res.data]);
  // 清空输入框
  setTeamValues({ team_name: '' });
})

5. 检查前端依赖与环境

  • 确认axios已正确安装:执行npm list axios查看依赖状态,未安装则执行npm install axios。
  • 确认后端服务运行在9000端口:如果后端端口不同,需修改代码中的接口地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:55:14