Javascript 找不到node.js/socket.io/socket.io.js
我不断地犯错误 /socket.io/socket.io.js 404(未找到) 未捕获引用错误:未定义io 我的代码是Javascript 找不到node.js/socket.io/socket.io.js,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我不断地犯错误 /socket.io/socket.io.js 404(未找到) 未捕获引用错误:未定义io 我的代码是 var express = require('express'), http = require('http'); var app = express(); var server = http.createServer(app); var io = require('socket.io').listen(server); server.listen(3000); 及
var express = require('express'), http = require('http');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(3000);
及
有什么问题
欢迎任何帮助 如何查找客户端的socket.io.js 安装socket.io
npm install socket.io
查找socket.io客户端
find ./ | grep client | grep socket.io.js
结果:
./node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
将socket.io.js复制到您的资源:
cp ./node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js /home/proyects/example/resources/js/
在html中:
<script type="text/javascript" src="resources/js/socket.io.js"></script>
将
socket.io.js
复制到公用文件夹(比如resources/js/socket.io.js
)不是正确的方法
如果Socket.io
服务器正确侦听您的HTTP
服务器,它将通过http://localhost:/socket.io/socket.io.js
,您不需要将其作为resources/js/socket.io.js
&手动提供,也不需要将其复制到可公开访问的文件夹中
代码示例- Express 3要求您实例化一个
http.Server
以将socket.io
附加到第一个
var express = require('express')
, http = require('http');
//make sure you keep this order
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
//...
server.listen(8000);
快乐编码:)这个问题似乎从未被回答过(尽管对于OP来说可能已经太晚了,我会为将来遇到它并需要解决问题的任何人回答) 与执行
npm install socket.io
不同,您必须执行npm install socket.io--save
以便socket.io模块安装在web开发文件夹中(在index.html或index.php所在的基本位置/运行此命令)。这会将socket.io安装到命令运行的区域,而不是全局,此外,它会自动更正/更新package.json文件,以便node.js知道它在那里
然后将源路径从
'/socket.io/socket.io.js'
更改为'http://'+location.hostname+':3000/socket.io/socket.io.js'
,而这与OP无关,如果您在维护其他人的代码时遇到此问题,您可能会发现问题是由编码器设置io.set('resource','/api/socket.io')引起的代码>在应用程序脚本中,在这种情况下,您的HTML代码将是type=“text/javascript”src=“/api/socket.io/socket.io.js”>
。。。“您可能想知道/socket.io/socket.io.js文件在哪里
来自,因为我们既不添加它,也不存在于文件系统中
io.listen在服务器上完成的部分魔术。它在服务器上创建一个处理程序
为socket.io.js脚本文件提供服务。”
从book Socket.IO实时Web
应用程序开发,第56页您只需遵循即可
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
http.listen(3000, function(){
console.log('listening on *:3000');
});
如果您正在学习socket.io教程,则应按如下所示添加此行
app.use(express.static(path.join(__dirname, '/')))
这是因为在本教程中,Express将只捕获url
/
并发送index.html
文件
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html')
})
但是,在index.html
中,您有一个脚本标记(
)请求socket.io客户端的资源,该资源未在index.js
中路由(可以在控制台网络中找到urlhttp://localhost:3000/socket.io/socket.io.js
).请检查代码中提到的目录路径。默认情况下,它是res.sendFile(uu dirname+'/index.html')代码>
确保将index.html放在正确的目录中调试步骤
npm install socket.io——在静态文件(index.html)中保存
。例如,您可能已经全局安装了它,当您查看调试器时,文件路径为空
更改脚本文件并实例化套接字,显式添加您在服务器文件中设置的本地主机
<script src="http://localhost:5000/socket.io/socket.io.js"></script>
<script>
const socket = io.connect("localhost:5000");
$(() =>
const cors = require("cors");
const http = require("http").Server(app);
const io = require("socket.io")(http);
然后使用Express中间件app.use()
方法实例化cors。将中间件放在与静态根文件的连接之上
app.use(cors());
app.use(express.static(__dirname));
作为最后一项检查,请确保您的服务器已连接到分配端口的http.listen()
方法,第一个参数是您的端口号,例如,我在这里使用了5000
const server = http.listen(5000, () => {
console.log("your-app listening on port", server.address().port);
});
由于io.on()
方法正在工作,并且套接字数据已连接到客户端,请使用所需的回调逻辑添加io.emit()
方法,并在前端JavaScript文件中再次使用socket.on()
方法和所需的回调逻辑。检查数据是否流动
我还编辑了上面的一条评论,因为它对我来说是最有用的,但是我还需要采取一些额外的步骤来使客户机-服务器连接正常工作。如果您想手动下载“socket.io/socket.io.js”文件并附加到html(而不想从服务器运行时获取),您可以使用
像
您是否也从同一个节点应用程序提供HTML文件?可能重复@robertklep:啊,不,我有一个index.HTML页面。。。从app.js我得到信息:socket.iostarted@Bondye不,这不是问题所在here@hausinho如果HTML由其他服务器提供,则需要包含socket.io文件的完整URL:
(或者其他主机名,显然)好的,将socket.io.js复制到一个我称之为js的文件夹中,所以现在是它的-但是现在我得到了错误!?!?!?这不是错误,这是连接请求,您必须在服务器/客户端中创建事件以与+1通信,在我最终找到这个源代码之前搜索了几个小时,发现有一个socket.io.js可能被复制到lib中。这是一个有用的解决方案,当只使用客户端而不使用服务器时。这应该是这个socket.io问题的有效答案。谢谢我也遇到了类似的问题,这与我正在重构旧代码这一事实有关,即使用app.listen(3000)代码>。这是行不通的。当我把它改成server.listen(3000)代码>它开始工作正常。我建议调用'var socket'的index.html
const server = http.listen(5000, () => {
console.log("your-app listening on port", server.address().port);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.min.js" integrity="sha512-eVL5Lb9al9FzgR63gDs1MxcDS2wFu3loYAgjIH0+Hg38tCS8Ag62dwKyH+wzDb+QauDpEZjXbMn11blw8cbTJQ==" crossorigin="anonymous"></script>