我正在尝试学习MERN堆栈,这是一个简单的愚蠢的问题,我已经几天没弄清了。 我正在尝试使用express和mongoose作为后端向api发出GET请求,并做出反应,为前端做出反应router。 这是api请求:
router.get('/:id', (req, res) => {
Product.findById(req.params.id)
.then(product => res.json(product))
});
我为此设置了路线
<Route path="/:id" component={Product}></Route>
这是我通过axios执行GET请求的产品组件:
componentWillMount() {
axios.get("/api/products/:id")
.then(res => this.setState({
product: res.data
}))
.catch(err => console.log(err))
}
它给出了以下错误:
CastError: Cast to ObjectId failed for value ":id" at path "_id" for model "product"
我已经寻找了好几天,但仍然没有找到解决此问题的方法,我认为这与猫鼬scheema的自动ID为_id
有关,这给api造成了一些问题。
模式:
const mongoose = require('mongoose');
const Schema = mongoose.Schema; // Create Schema
const ProductSchema = new Schema({
name: {
type: String,
required: true,
},
pic: {
type: String,
},
price: {
type: Number,
},
sale: {
type: Number,
}
});
module.exports = Product = mongoose.model('product', ProductSchema);
预先感谢大家!
答案 0 :(得分:0)
请检查您的req.params.id
作为供mongo查询的有效ID的有效性。错误是由于id并非mongo可以使用的实际objectId而引起的。
答案 1 :(得分:0)
几个小时之后,我已经解决了这个问题,当我单击链接时,它指向的是products/:id
而不是实际的ID,我要做的就是const link = '/products/' + this.props.product._id
并通过{ link
标签中的{1}}。