AJAX > MongoDB 查询只工作五次,然后服务器停止处理请求,我无法刷新页面



我正在构建一个React/Express/MongoDB应用程序。我正在尝试进行实时搜索,并在您键入时返回结果。服务器上的数据库调用仅工作五次,然后停止。然后我无法刷新浏览器,所以我认为此时服务器停止处理请求。我是否阻止了 Node 的事件循环?

当我停止服务器时,所有未应答的响应都显示在浏览器控制台中:

POST http://localhost:3000/action/searchTextIndex net::ERR_EMPTY_RESPONSE POST http://localhost:3000/action/searchTextIndex net::ERR_EMPTY_RESPONSE POST http://localhost:3000/action/searchTextIndex net::ERR_EMPTY_RESPONSE

这是我的 AJAX 电话。注意:这被限制为以 800ms 的最大频率调用。

search(query, dbCollection) {
axios.post('/action/searchTextIndex', {
dbCollection,
query
})
.then(response => {
console.log(response);
})
.catch(err => console.log(err))
}

这是快速的js代码:

const searchTextIndex = (req, res, db) => {
const { query, collection } = req.body;
db.collection(collection).find(
{ $text: { $search: query } }
)
.project({ score: { $meta: 'textScore' } })
.sort({ score: { $meta: 'textScore' } })
.toArray((err, result) => {
if (err) {
console.log(err);
res.send({ type: 'server_error' });
return;
}
console.log(result);
return;
})
}

为什么它只能工作五次,即使我在按下搜索字段中的每个字符之前等待几秒钟?

看起来问题是没有为服务器上的快乐路径发送响应。看看这是否有效。如果这不能解决问题,请包括定义db参数并将其作为参数传递给searchTextIndex的代码。

const searchTextIndex = (req, res, db) => {
const { query, collection } = req.body;
db.collection(collection).find(
{ $text: { $search: query } }
)
.project({ score: { $meta: 'textScore' } })
.sort({ score: { $meta: 'textScore' } })
.toArray((err, result) => {
if (err) {
console.log(err);
res.send({ type: 'server_error' });
return;
}
console.log(result);

// need to be sure you send the response
return res.json(result);
})
}

相关内容

最新更新