如何使socket.io + ejs + mongoose正常工作?

时间:2015-11-19 16:48:34

标签: node.js socket.io ejs socket.io-1.0

我的目标是每当有人按下接受按钮时,会自动增加导航栏上的通知。

逻辑

1)管理员按下接受按钮

2)用户的导航栏将监听通知事件,并将增加计数的数量并将消息附加到li元素。

这里是我希望socket.io将更新的通知图片

enter image description here

但是,我没有看到任何实时更新

这是代码

socket.io客户端

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script>
  var socket = io.connect('http://localhost:3000');
  $('form').submit(function(){
    var companyName = $("#companyName").val();
    var notification = "Accepted by " + companyName;
    var user_id = $('#candidate_id').val();
    var notificationCount = parseInt($('#notification').html());
    noticationCount += 1;
    socket.emit('notify', {notification: notification, userId: user_id, count: notificationCount});
  });
  socket.on('notify', function(msg){
    $('#notification').html(msg.count);
    $('#addNotification').append($('<li>').text(msg.notification));
  });
</script>

HTML(EJS)代码 - 这是它应该更新的地方。

<li class="dropdown notifications-menu">

            <span id='notification' class="label label-warning"><%= user.notifications.length %></span>
          </a>
          <ul class="dropdown-menu">

            <li>

              <ul class="menu" id="addNotification">
                <% for(var i=0; i < user.notifications.length; i++)  { %>
                <li><!-- start notification -->
                  <a href="#">
                    <i class="fa fa-users text-aqua"></i> <%= user.notifications[i] %>
                  </a>
                </li>
                <% } %>
              </ul>
            </li>

          </ul>
        </li>

了Serverside

io.on('connection', function(socket){
  socket.on('notify', function(msg){

      User.findById({ _id: msg.userId}, function(err, found) {
        if (typeof found === 'undefined') {
          // Do something but what should I do?s
        } else {
          found.notifications.push(msg.notification);
          found.save(function(err) {
            console.log(msg.notification); // Doesnt even console.log the data.

          });
        }
      });
  });
});

我的目标再次是

1)有人提交了一个按钮,它将根据tag's id id="user_id" var notificationCount = parseInt($('#notification').html()); noticationCount += 1; 发出所有隐藏的输入值。

2)socket.on(&#39; notify&#39;) - &gt;将通过目标html标签的id实时监听和更新它

3)将数据保存在数据库中。

然而上面的实现,我必须刷新它然后我可以看到结果。 但是,如果我将此行添加到socket.io客户端代码

#define __CL_ENABLE_EXCEPTIONS      // with cl.hpp
//#define CL_HPP_ENABLE_EXCEPTIONS  // with cl2.hpp

#include <CL/cl.hpp>

int main(int argc, char *argv[])
{
  try
  {
    // OpenCL code here
  }
  catch (cl::Error& err)
  {
    cout << err.what() << " failed with error code " << err.err() << endl;
  }
}

它甚至不会将其保存到数据库中,还可以实时更新它。我

请借给我你的实时知识:)

1 个答案:

答案 0 :(得分:0)

1)你不应该在cdn中包含socket.js文件,它应该像

一样加载

<script src="http://localhost:3000/socket.io/socket.io.js"></script>

您不需要在项目文件夹中的任何位置保存socket.io.js文件,这由socket.io模块处理

2)我看到代码接收客户端消息到服务器,而不是从那里回到客户端。它看起来像这样(广播)

io.on('connection', function(socket){ socket.on('notify', function(msg){ // pass notification & count to client io.emit('notify', {notification:msg.notification, count:your_msg_count}); ....

我不会深入研究您的代码,希望这可以解决您的问题。