在socket.io中分解出客户端代码

时间:2015-07-29 10:57:31

标签: javascript socket.io refactoring client-side

所以,我知道node.js,但我正在学习如何使用socket.io和express.js,(几小时前刚刚开始使用express / socket)。

这不是一个大问题,但我喜欢我的代码是干净的,而且我试图将我的客户端代码分解出来,所以它只是作为src的脚本标记。例如,在我的index.html页面上,我有以下内容:

..
<head>
    <title>Example Title</title>
    <link href="./styles/index.css" rel="stylesheet" type="text/css" />
    <script src="./scripts/index.js" type="text/javascript"></script>
    <script src="/socket.io/socket.io.js" type="text/javascript"></script>
</head>

其中./scripts/index.js是index.html的javascript代码。它看起来像

var socket = io.connect("http://localhost:8000");

document.getElementById("sendBox").submit = function() {
    var msg = document.getElementById("m");socket.emit("chat message", msg.value);
    msg.value = "";
    return false;
};

所有路由工作正常,但现在问题是当我尝试使用代码时,我收到错误“ReferenceError:io is not defined”。在socket.io的网站上,他们的示例总是只有一个脚本标记,其中嵌入了所有特定于页面的代码。我认为这很难看,这意味着我必须编辑一个html页面来编辑我的js页面。当我的编辑器中的突出显示和自动更正与html文件上的html对齐时,尤其令人烦恼,而不是js。这不是一个灾难性的事情,我可以在他们的例子中嵌入我的代码,例如socket.io节目,但我不想这样做。

对于那些让我感到困惑的人,Socket.io的初学者示例代码:

<head>
  <title>Socket.IO Chat</title>
  <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
  <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
  <script> // This is the code i want to look more like ^
    var socket = io();
    $('form').submit(function(){
      socket.emit('chat message', $('#m').val());
      $('#m').val('');
      return false;
    });
  </script> // End of the code I'd like to factor out.

总结一下,我如何使变量“io”可用于我的index.js脚本?

由于

1 个答案:

答案 0 :(得分:0)

尝试交换js脚本标记

<head>
    <title>Example Title</title>
    <link href="./styles/index.css" rel="stylesheet" type="text/css" />
    <script src="/socket.io/socket.io.js" type="text/javascript"></script>
    <script src="./scripts/index.js" type="text/javascript"></script>
</head>

你拥有它的方式,它会在加载之前尝试运行io