我正在尝试让 socket.io 与我最近开始试验的 Svelte 一起工作,它是按照https://svelte.dev/ 上给出的说明安装的库存形式。
我不知道为什么bundle.js:4497 GET http://localhost:5000/socket.io/?EIO=3&transport=polling&t=N72840H 404 (Not Found)无论我尝试了我在早期“基本”Node.js 服务器上所做的工作的什么组合,我都会收到错误,其相关代码如下所示:
const express = require('express');
const app = express();
const server = http.createServer(app)
const io = require('socket.io')(server,{
transports: ['websockets', 'polling'],
upgrade:false,
cookie:false
});
const sockets = require('./models/socket')(io)
Run Code Online (Sandbox Code Playgroud)
我已经在各个地方尝试了上述建议的多种组合,其中包括以下替代方案:
require('http').Server(app)
Run Code Online (Sandbox Code Playgroud)
......为什么.Server()而不是.createServer()?从来没有人解释过。我试着app和express和server or app.listen和没有,一些教程/职位有他们,别人不一样-不知道是否有任何这是前提条件或没有。许多例子有localhost,许多没有。有时在冒号后有一个数字,有时没有。
在前端(在.svelte文件中)尝试使用import io from 'socket.io-client',在 index.html 文件中使用 cdn,在头部使用<script src="../socket.io/socket.io.js"></script>(无点、1 个点、无斜线等)。最后一个不同,因为在尝试连接之前没有找到它io(),这是持久性错误产生的地方。
在io()有时被建议作为 …
在单击功能上,我可以选择播放音频。
单击仅触发一次(在我添加之后.off(),我似乎必须为每个单击事件执行此操作,因为我认为我从根本上不了解 javascript 的工作原理)但是添加到“结束”侦听器的函数显示了它触发按钮被点击的次数。我想.play()也被多次解雇。
这些需要在 click 事件中才能获取 id,那么我如何在使用 js 时阻止这些事情发生,在这里和其他地方?添加event.stopPropagation(),event.bubbles = false和.off()无处不在 似乎没有必要(在这种情况下无论如何都没有区别)。
$('.button').off().on('click', function(event){
event.stopPropagation();
event.bubbles = false;
var id = $(this).attr('id')
if ($(this).hasClass('hasAudio')) {
document.getElementById('audio_'+id).play();
document.getElementById('audio_'+id).addEventListener("ended", function(){
console.log("ended");
});
}
});
Run Code Online (Sandbox Code Playgroud) 我对如何以及为什么设置 node.js 应用程序以及任何 app.use 函数如何工作一无所知 - 关于它的教程没有解释任何原因。
无论如何,我在 app.js 根文件中设置了 socket.io、res.locals 和 index.js。
const sockets = require('./models/socket')(io)
app.use(function (req, res, next) {
res.locals.user_id = req.session.user_id;
next();
});
const routes = require('./routes/index');
app.use('/', routes);
Run Code Online (Sandbox Code Playgroud)
我希望能够访问 socket.js 模型中的 res.locals,就像我可以在路由文件夹中的 index.js 中一样。
我无法猜测如何去做这件事。如果有人能够解释我如何以及为什么可以或不能,那将是一个奖励。谢谢!