`require'socket.io-client.js'`不工作

我能够获得运行在我自己的服务器上的基本socket.io服务器应用程序,并通过任何networking浏览器(我尝试FF,铬和IE7都可以)直接请求它。

现在,问题来了,客户端示例代码不起作用,我在Chrome控制台中出现以下错误:

参考socket.io.js中的这行代码,“未捕获的ReferenceError:require未被定义”:var client = require('socket.io-client');

这使我相信,它不承认要求的命令期,这似乎很奇怪。 还有一些其他的东西 – 我有apache运行,所以把我所有的socket.io文件移动到我的apache目录htdocs中,通过http端口80访问,这些端口是用cygwin和指南安装的: https : //github.com /joyent/node/wiki/Building-node.js-on-Cygwin-(Windows)

socket.io文件也安装在我的c:驱动器上的cygwin目录下,如果被apache访问,它们是无用的。 另一个小技巧 – 我有一个socket.io-client.js文件,但是当我打开它来使用写字板编辑,它看​​起来损坏,只有一行文本内: <symlink>ÿþi

require()函数是Node.js的一个特性,只能在服务器端运行的Javascript上运行。 要在浏览器中包含文件,您必须使用常规方法:

 <script src="/socket.io/socket.io.js"></script> 

Node.js通常以socket.io服务器连接到Web服务器实例的方式进行设置,该服务器也是Node.js服务器的一部分。 代码示例直接从socket.io“如何使用”页面中获取,这将在服务器端:

 var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , fs = require('fs') app.listen(80); 

如果按照上述方式使用,则Node.js是服务器,也是服务器网页的静态部分,Node.js服务器的地址是包含客户端脚本的参考。

另一个用例是静态HTML由主Web服务器提供服务,并且您尝试连接到可能位于另一个地址或另一个端口或两者的Node.js实例。 您的主Web服务器不提供Socket.io.js。 它由在Node.js服务器上运行的socket.io直接提供。 您必须提供客户端浏览器的Node.js服务器地址来获取socket.io客户端JavaScript文件,如下所示:

 <script src="http://nodejs.address:port/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://nodejs.address:port'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script> 

作为一个侧面说明,有客户端JavaScript库,提供require()函数,检查Javascript要求在客户端

您可以使用Browserify( http://browserify.org )或WebPack( http://webpack.github.io )在客户端使用类似于节点的CommonJS要求。

我使用browserify来pipe理浏览器端代码的所有require()资源。

这就是说,我可以通过以下方式在我的浏览器端代码中要求socket.io-client:

 var io = require('socket.io-client'); var $ = require('jquery'); var socket = io(); $('form').submit(function(){ socket.emit('chat message', $('#m').val()); $('#m').val(''); return false; }); socket.on('chat message', function(msg){ $('#messages').append($('&lt;li&gt;').text(msg)); }); 

与使用传统脚本标记格式的以下代码片段不同,它们是在socket.io的github示例中find的: https : //github.com/rauchg/chat-example/blob/master/index.html

 <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> var socket = io(); $('form').submit(function(){ socket.emit('chat message', $('#m').val()); $('#m').val(''); return false; }); socket.on('chat message', function(msg){ $('#messages').append($('<li>').text(msg)); }); </script> 

socket.io-client可以在您的开发环境中作为节点模块进行下载:

 npm install socket.io-client