mongoose CastError:对于模型“PostMessage”的路径“_id”处的值“search”(类型为字符串),转换为ObjectId失败

ymzxtsji  于 2023-02-16  发布在  Go
关注(0)|答案(3)|浏览(118)

在mongoose中执行查询搜索时出现强制转换错误

export const getPostsBySearch = async (req, res) => {
    const {searchQuery, tags} = req.query
    try {
        const title = new RegExp(searchQuery, 'i')
        const posts = await PostMessage.find({ $or: [{ title: String(title) }, {tags: {$in: tags.split(',')}}] })
        res.json({data: posts})
    } catch (error) {
        console.log(error)
        res.status(404).json({message: error.message})
    }
}

调用它
按搜索获取帖子({搜索:“无”,标记:“奇迹”})
我期待一个具有相关筛选器的post数组

fiei3ece

fiei3ece1#

这可能是您在服务器端代码中如何安排路线的问题。
您可以参考here
在我的例子中,我只是重新排列路由器

router.get("/", getPosts);
router.get("/:id", auth, getPost);
router.get("/search", getPostsBySearch);

router.get("/search", getPostsBySearch);
router.get("/", getPosts);
router.get("/:id", auth, getPost); # routes with id need to come after other routes

希望这能有所帮助!

xxls0lw8

xxls0lw82#

const posts = await PostMessage.find({ $or: [{ title: String(title) }, {tags: {$in: tags.split(',')}}] })

必须是:

const posts = await PostMessage.find({ $or: [{ title: title }, {tags: {$in: tags.split(',')}}] })

它是一根弦;你不必那么做。

rsl1atfo

rsl1atfo3#

错误信息{“消息”:“在模型“PostMessage”的路径“_id”处,为值“search”(类型字符串)强制转换为ObjectId失败}
只需更改并重新安排路由器设置:
之前:

router.get('/', getPosts)
router.get('/:id', getPost)
router.get('/search', getPostsBySearch)

之后:

router.get('/', getPosts)
router.get('/search', getPostsBySearch)
router.get('/:id', getPost)

对我来说,这是工作。重新安排您的路由器设置,并再次检查。

相关问题