将 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(<your string>)
。然而,假的不会削减它。它需要是字符串格式的 mongo _id
另外,我已经用邮递员测试了这个 api,它工作得很好,但不是在这里【参考方案2】:
我在谷歌几个小时后解决了这个问题,结果当我点击链接时,它被定向到 products/:id
而不是实际的 id,我所要做的就是 const link = '/products/' + this.props.product._id
并通过 link
在<a>
标签。
【讨论】:
以上是关于将 url id 从 react-router 传递给 mongoose的主要内容,如果未能解决你的问题,请参考以下文章
在 React-router Link 中将对象作为道具传递
从 URL 中删除 '%20' - React-Router