Socket.IO – require没有被定义

我试图让socket.io工作,但现在在Chrome我得到的错误:

未捕获的ReferenceError:require是未定义的

client.php:9Uncaught ReferenceError:io没有定义

我改变了包含socket.io.js文件的方式,因为它存在一些其他的东西:

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

如果我尝试

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

我得到: 无法加载资源:服务器响应状态为404(未find)

这是Ubuntu的最新的一切

我使用来自http://socket.io/的服务器代码来处理像client.php这样的文件夹,这个文件夹的名字是server.js,只是修改过的端口。

如果您的脚本不是来自您的networking服务器,这是行不通的:

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

你必须明确表示主机和端口:

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

你在服务器上沿着PHP运行node.js吗?

有两个“socket.io”包,一个服务器和一个客户端 。 您正在尝试在浏览器中加载服务器/node_modules/socket.io/lib/socket.io.js )。 你想要的脚本叫做socket.io-client ,你可以在https://raw.github.com/LearnBoost/socket.io-client/master/socket.io-client.jsfind它&#x3002;

会发生什么情况是, 当您在端口80上运行节点时 ,socket.io会自动从端口80提供/socket.io/socket.io.js (客户端)文件。 在你的情况下,Apache已经在端口80,所以你需要从它手动提供文件。

你的库包含( /socket.io/socket.io.js )在你的客户端浏览器编码可能是好的。 但是你可能会指向socket.io.js的错误副本如果你使用( npm install socket.ionpm install socket.io那么你可能需要在以下目录中查找socket.io.js的客户端版本:

C:\Program Files (x86)\nodejs\node_modules\socket.io\node_modules\socket.io-client\dist\socket.io.js

如果在那里,那么你可能想复制该模块到您的Web发布目录,或作为替代,你可以改变你的虚拟目录指向的物理path。

我尝试了什么,说什么,它的作品。 我需要指定主机和端口。 对于在端口81上侦听的节点应用程序,我需要在客户端JavaScript中指定端口81。 Nevermind /socket.io/socket.io.js不存在于虚拟主机中,节点在运行时弥补它。

正如其他人已经注意到,当在服务器端运行io时,将提供“socket.io.js”的“automagical”服务 – 并分支到lib目录中的其他js文件。

我想补充的是,这不是直观的,不,你不能让你的普通Web服务器服务这个文件 – 错误只是变得更奇怪,看似矛盾(不需要定义等)。 这不是一个正常的js文件,我希望所有的教程都会强调这一点。

无论如何,如果你运行在nginx后面,例如,在我的情况下,将端口设置设置为分配给节点 – 端口3000的同一个端口。 我在客户端使用这个端口是这样的:

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

…然后在服务器代码中使用端口3000 – 有太多的方式/版本,你可以编写代码服务器的代码为一个例子做任何事情,但混淆了大多数谁使用“不同的方式”。

如果您看到类似require() is not defined东西require() is not defined ,那可能是因为您使用的JavaScript库采用了AMD(asynchronous模块定义)的格式。 尝试使用RequireJS (全function)或curl JS库 (更小,更简单)来加载SocketIO。

我有同样的问题,我确认@ thejh的解决scheme工作。 然而,当我阅读他的build议时,我不确定服务器是什么。 我有MAMP在端口80上运行。下面的代码将是在端口8001上运行的“node.js服务器”。

一旦我启动了node.js服务器(运行下面的代码),访问http:// localhost:4001 / socket.io / socket.io.js就会返回javascript文件。

 /* Node.js server */ var sys = require('sys'); var io = require('socket.io'); var http = require('http') server = http.createServer(function(req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write('http server started'); res.end(); }); server.listen(4001); // socket.io var socket = io.listen(server); socket.on('connection', function(client) { client.on('message', function(message) { // We're in! console.log('received client message '+ message); }); client.on('disconnect', function() {}); socket.send('welcome to the local node.js server!'); }); 

对于Drupal中的人来说, drupal_add_js('http://localhost:4001/socket.io/socket.io.js', array('type' => 'external', 'group' => JS_LIBRARY)); 在一个hook_init做的伎俩。

事实上,我实际上已经成功地让Apache提供这些文件。

简单地创buildnode_modules / socket.io / node_modules / socket.io-client / dist的内容到您的web根目录(我实际上复制了这些文件,软链接可能没有问题,我没有尝试)。 对于我安装的socket.io(0.9.16),我安装了socket.io全局这两个命令的窍门:

 sudo cp -av /usr/lib/node_modules/socket.io/node_modules/socket.io-client/dist /var/www/socket.io chown -R www-data:www-data /var/www/socket.io 

这是在一个Ubuntu 13.10盒子之前,我安装了通常的LAMP堆栈然后添加node.js.

现在保持这个副本同步,因为新版本的socket.io被释放是一个我还没有试图解决的问题。

干杯