大家好!我是一个网络开发的新手,一直在Youtube上看mern项目教程。我正在尝试实现帖子的搜索功能。帖子存储在MongoDB中。在插入标题和/或标签后,搜索表单总是得到这个错误。{“message”:“对于模型“Post”,在路径“_id”处,值“search”(类型字符串)转换为ObjectId失败}。我想mongoose会把我的搜索请求错当成_id req.param,但我不确定。有什么建议如何解决这个错误吗?
.models\Post.js
import mongoose from 'mongoose'
const PostSchema = new mongoose.Schema(
{
title: String,
message: String,
name: String,
creator: String,
tags: [String],
selectedFile: String,
likes: {
type: [String],
default: [],
},
createdAt: {
type: Date,
default: new Date()
}
}
)
const Post = mongoose.model('Post', PostSchema)
export default Post
controllers\posts.js
export const getPostsBySearch = async (req, res) => {
const { searchQuery, tags } = req.query;
try {
const title = new RegExp(searchQuery, "i");
const posts = await Post.find({ $or: [ { title }, { tags: { $in: tags.split(',') } } ]}).exec();
res.json({ data: posts });
} catch (error) {
res.status(404).json({ message: error.message });
}
}
axios端点
export const fetchPostsBySearch = (searchQuery) => API.get(`/posts/search?searchQuery=${searchQuery.search || 'none'}&tags=${searchQuery.tags}`);
actions\posts.js
export const getPostsBySearch = (searchQuery) => async (dispatch) => {
try {
dispatch({ type: START_LOADING });
const { data: { data } } = await api.fetchPostsBySearch(searchQuery);
dispatch({ type: FETCH_BY_SEARCH, payload: { data } });
dispatch({ type: END_LOADING });
} catch (error) {
console.log(error);
}
};
1条答案
按热度按时间9jyewag01#
例如,只需更改路由名称
/v1/search”中的所有参数都是空的。
如果你想在一个页面上搜索一个新的内容,那么你可以在这里找到它。