将 url id 从 react-router 传递给 mongoose

Posted

技术标签:

【中文标题】将 url id 从 react-router 传递给 mongoose【英文标题】:Passing url id from react-router to mongoose 【发布时间】:2019-01-24 02:02:35 【问题描述】:

我正在尝试学习 MERN 堆栈,这是一个简单的愚蠢问题,我已经有几天没能弄清楚了。 我正在尝试使用 express 和 mongoose 作为后端向 api 发出 GET 请求,并为前端做出反应,反应路由器。 这是 api 请求:

router.get('/:id', (req, res) => 
    Product.findById(req.params.id)
        .then(product => res.json(product))
);

我将路线设置为:

<Route path="/:id" component=Product></Route>

这是我使用 axios 执行 GET 请求的 Product 组件:

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"

我已经找了好几天了,仍然没有找到解决这个问题的方法,我认为这与 mongoose 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);

提前谢谢大家!

【问题讨论】:

你能发布产品的架构/模型吗? 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); id是mongoose自动生成的 【参考方案1】:

请检查您的 req.params.id 的有效性作为 mongo 查询的有效 id。错误是特定于 id 不是 mongo 可以使用的实际 objectId。

【讨论】:

我检查了 mongoose.Types.ObjectId.isValid() 并返回 false 我如何将 req.params.id 转换为 ObjectId? 使用mongoose.Types.ObjectId(&lt;your string&gt;)。然而,假的不会削减它。它需要是字符串格式的 mongo _id 另外,我已经用邮递员测试了这个 api,它工作得很好,但不是在这里【参考方案2】:

我在谷歌几个小时后解决了这个问题,结果当我点击链接时,它被定向到 products/:id 而不是实际的 id,我所要做的就是 const link = '/products/' + this.props.product._id 并通过 link&lt;a&gt; 标签。

【讨论】:

以上是关于将 url id 从 react-router 传递给 mongoose的主要内容,如果未能解决你的问题,请参考以下文章

在 React-router Link 中将对象作为道具传递

从 URL 中删除 '%20' - React-Router

React-Router:将我的 url 从 hashHistory 重定向到 browserHistory

如何将参数传递给 URL 内某处的 routerLink?

在 react-router 渲染函数中访问 URL 参数

vue路由传参