将URL ID从React-Router传递给猫鼬

时间:2018-08-17 04:33:16

标签: express mongoose react-router mern

我正在尝试学习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);

预先感谢大家!

2 个答案:

答案 0 :(得分:0)

请检查您的req.params.id作为供mongo查询的有效ID的有效性。错误是由于id并非mongo可以使用的实际objectId而引起的。

答案 1 :(得分:0)

几个小时之后,我已经解决了这个问题,当我单击链接时,它指向的是products/:id而不是实际的ID,我要做的就是const link = '/products/' + this.props.product._id并通过{ link标签中的{1}}。