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

标签 node.js socket.io

我能够在我自己的服务器上运行基本的 socket.io 服务器应用程序,并直接通过任何网络浏览器请求它(我尝试了 FF、chrome 和 IE7,它们都可以工作)。

现在,问题在于客户端示例代码对我不起作用,并且我在 chrome 的 javascript 控制台中收到以下错误:

"Uncaught ReferenceError: require is not defined" in reference to this line of code in socket.io.js: var client = require('socket.io-client');

这让我相信它无法识别 require 命令期间,这似乎很奇怪。其他几件事——我运行了 apache,因此将我的所有 socket.io 文件移动到我的 apache 目录 htdocs 中,以便通过 http 端口 80 访问,这些端口是使用 cygwin 安装的,指南位于:https://github.com/joyent/node/wiki/Building-node.js-on-Cygwin-(Windows)

socket.io 文件也安装在 Windows 中我的 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 "how to use" 的代码示例页面,这将在服务器端:

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>

附带说明,有提供 require() 函数的客户端 javascript 库,请查看 Javascript require on client side

关于node.js - `require ' socket.io-client.js '` 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6785979/

相关文章:

javascript - 使用 express js 在套接字 io 上阻止跨源请求

node.js - 安装 socket.io 的问题

node.js - 在 Node.js 服务器中实现安全且生产就绪的身份验证系统,而无需依赖第三方提供商

node.js - 使用 grunt concat-json 排除文件

javascript - Node.js Express 网站实时更新数据

javascript - Redis Store 没有 get 方法?

node.js - 将 node-http-proxy 、 proxy.proxyRequest 表达到 https 服务器?

node.js - 从 Express 4 提供静态 html 文件

node.js - 取回空的nodejs + firebase

javascript - 本地和远程站点上的 Node.js/Socket.io Access-Control-Allow-Origin 错误