node.js - Mongodb搜索功能未执行
问题描述
我正在使用 react、nodejs 和 mongodb。我有一个搜索栏,它向搜索函数发送一个发布请求,然后查询 mongodb 并返回结果。问题是该函数永远不会被执行。
反应:
const getData = (searchValue) => {
const ourRequest = Axios.CancelToken.source();
async function fetchPost() {
try {
const response = await Axios.post(`/search`, {
params: { searchValue },
cancelToken: ourRequest.token,
});
if (response.data) {
console.log(response.data);
} else {
dispatch({ type: 'notFound' });
}
} catch (e) {
console.log('There was a problem or the request was cancelled.');
}
}
fetchPost();
};
表达:
路由器.js
apiRouter.post('/search', postController.search);
postController.js
exports.search = function (req, res) {
Post.search(req.body.searchTerm)
.then((posts) => {
console.log('Hello..');
res.json(posts);
})
.catch((e) => {
res.json([]);
});
};
Post.js:
Post.search = function (searchTerm) {
return new Promise(async (resolve, reject) => {
if (typeof searchTerm == 'string') {
console.log('hello..', searchTerm) // nothing
let posts = await Post.reusablePostQuery([
{ $match: { $text: { $search: searchTerm } } },
{ $sort: { score: { $meta: 'textScore' } } },
]);
resolve(posts);
} else {
reject();
}
});
};
当我输入搜索时,我在开发控制台中得到一个空数组响应。
解决方案
解决这样的问题总是很困难,因为很多地方都可能存在问题。但我会指出一些突出的,希望它能引导你找到答案。
首先跳出来的是:req.body.searchTerm
. 你正在寻找searchTerm
你的 React 应用程序没有发送它的时间。相反,您发送searchValue
的params: { searchValue }
内容将转换为params: { searchValue: searchValue }
.
所以你应该在你的 React 代码中改变两件事。
- 发送带有您请求的正文。
- 使用正确的命名法,以便您的后端应用程序可以看到它。
const response = await Axios({
method: 'post',
url: '/search',
data: {
searchTerm: searchValue
},
cancelToken: ourRequest.token
})
从理论上讲,这些更改应该可以解决您的问题。
推荐阅读
- drake - Drake 中 LeafSystem 的更新频率问题
- python - 在 Gurobi Python 中正确制定约束
- javascript - 客户聊天框不改变颜色
- javascript - Moment 在 Web 和 Cordova 应用程序中返回不同的时间
- python - 如何对我的 RNN 模型进行预测?
- html - 在应用分页 CSS 时修复下划线
- excel - 计算列以根据三个条件对所有匹配值求和
- z3 - Dafny 作为 SAT-QBF 求解器没有给出正确的结果
- python - 从python中的列表中删除错误重复值的问题
- php - preg_split 返回一个非预期的数字