使用Node.js和MongoDB进行实时搜索

时间:2017-06-05 00:50:30

标签: javascript node.js mongodb socket.io

因此,我尝试制作实时搜索功能,用户可以根据用户名搜索其他用户,相关结果将显示在网页上。到目前为止,我只遇到过显示如何为PHP和MySQL执行此操作的资源。如何实现Node.js和MongoDB?我在我的项目中使用socket.io,是否可以使用它?

感谢您的帮助,如果需要我的任何代码,请告诉我们!

2 个答案:

答案 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);
    });
})