繁体   English   中英

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

[英]Live Search with Node.js and MongoDB

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

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

在您的需求中,它并不取决于要使用哪个后端。

在后端上,只需创建一个rest API即可处理搜索请求(如果您想使用NodeJS,则可以参考本文https://scotch.io/tutorials/build-a-restful-api-using-node-and-表达4 )。

在前端,您只需使用XHR请求即可进行实时搜索,而无需套接字。 每次用户键入输入内容时,检测到输入更改事件并将搜索请求发送到后端api(您可以通过纯JavaScript XHR请求执行此操作,也可以在JQuery中使用ajax模块...),从响应中获取结果,打印到屏幕上。 在实现此目标之后,您可以通过限制请求的时间量来提高前端的搜索性能(每次使用按键都不发送请求,但是经过一段时间(例如每200ms),此技术称为“反跳” )。

基本上,您将观察用户何时在用户名输入字段中输入内容(使用keyup事件),并在服务器上使用socket.io将输入字段的值发送至服务器,当事件中收到该值时,您将使用该值对数据库(猫鼬中的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);
    });
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM