我是React的新手。我正在制作一个板球统计信息页面,并且在尝试使用React将数据发布到数据库时遇到错误。我使用Axios发布了一个请求,只有一半的数据发送到了数据库。其余的卡在验证中。这是代码。
import React,{useState,useEffect} from 'react';
import qs from 'qs';
import axios from 'axios';
function CreatePlayer(props){
const [newPlayer,setNewPlayer] = useState({
name:"",
role :"",
runs : 0,
wickets : 0
});
function handleChange(event){
const {name,value}=event.target;
setNewPlayer((prevPlayer) =>{
return{
...prevPlayer,
[name]:value
};
});
};
function submitPlayer(event){
console.log(newPlayer);
const data = qs.stringify({
playerName : newPlayer.name,
role : newPlayer.role,
stats:{
runs : newPlayer.runs,
wickets : newPlayer.wickets
}
});
const headers ={
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
};
axios.post("http://localhost:5000/players/add",data,headers)
.then( res => console.log(res.data))
.catch( err => console.log(err));
event.preventDefault();
};
return(
<div className="container text-center">
<h1 className="heading text-center">New Player</h1>
<form>
<div className="form-group"><input onChange={handleChange} name="name" value={newPlayer.name} placeholder ="Player Name"/></div>
<div className="form-group"><input onChange={handleChange} name="role" value={newPlayer.role} placeholder="Role"/></div>
<div className="form-group"><input onChange={handleChange} name="runs" value={newPlayer.runs} placeholder="Runs"/></div>
<div className="form-group"><input onChange={handleChange} name="wickets" value={newPlayer.wickets} placeholder="Wickets"/></div>
<button onClick={submitPlayer}>Submit</button>
</form>
</div>
);
}
export default CreatePlayer;
和猫鼬模型:
const playersSchema = new mongoose.Schema({
playerName : String,
role : String,
stats : {
runs : Number,
wickets : Number
}
},
{
timestamps: true
});
我尝试发布时遇到此错误:
"Player validation failed: stats.runs: Cast to Number failed for value "NaN" at path "stats.runs"
"Player validation failed: stats.wickets: Cast to Number failed for value "NaN" at path "stats.wickets"
答案 0 :(得分:0)
这会将stats.runs
和stats.wickets
视为一个字符串,MongoDB期望它为Number。
将其转换为Number,然后再发送给Mongo。
runs = parseInt(stats.runs, 10);
wickets = parseInt(stats.wickets, 10);
如果它存储任何数值,这会将您的跑步和检票口字符串转换为数字。