因此,我尝试制作实时搜索功能,用户可以根据用户名搜索其他用户,相关结果将显示在网页上。到目前为止,我只遇到过显示如何为PHP和MySQL执行此操作的资源。如何实现Node.js和MongoDB?我在我的项目中使用socket.io,是否可以使用它?
感谢您的帮助,如果需要我的任何代码,请告诉我们!
答案 0 :(得分:3)
根据您的要求,它并不太依赖于使用哪个后端。
在后端只需创建一个rest API来处理搜索请求(如果你想使用NodeJS,你可以参考这篇文章https://scotch.io/tutorials/build-a-restful-api-using-node-and-express-4)。
在前端,您可以只使用XHR请求进行实时搜索,不需要套接字。每次用户键入输入时,检测输入更改事件并将搜索请求发送到后端api(您可以通过纯javascript XHR请求执行此操作,或者在JQuery中使用ajax模块...),从响应中获取结果,打印到屏幕上。 实现这一目标后,您可以通过限制请求的时间来提高前端的搜索性能(每次使用时都不会发送请求按键,但是经过一段时间后,例如每200ms,这个技术调用&#34 ;去抖"。)
答案 1 :(得分:1)
基本上,当用户在用户名输入字段中写入(使用keyup事件)并在服务器上使用socket.io将输入字段的值发送到服务器时,您会看到事件您将使用该值对数据库(mongoose中的model.findOne)进行查询,并返回用户(如果存在)。 这里的关键是通过在mongoose中使用户名字段唯一或手动创建新索引,使数据库在用户名上做一个索引以便加快搜索。
示例:
使用jquery前端:
$(document).ready(function() {
var username = $('#username');
username.keyup(function() {
var value = username.val();
socket.emit('find_user', value);
});
});
socket.on('find_user_result', function(user) {
// treat result here
});
后端与猫鼬:
socket.on('find_user', function(value) {
User.findOne({username: value}, function(err, user) {
if (err) throw err;
if (!user) socket.emit('find_user_result', {});
else socket.emit('find_user_result', user);
});
})