【问题标题】:Node js with express and socket.io - cannot find socket.io.js带有 express 和 socket.io 的节点 js - 找不到 socket.io.js
【发布时间】:2016-06-29 05:27:22
【问题描述】:

我正在使用 socket.io 开发一个节点 js 应用程序。我查看了一些关于 SO 的答案,但他们无法帮助我解决我的问题。我得到的错误是

Failed to load resource: the server responded with a status of 404 (Not Found)
localhost/:10 Uncaught ReferenceError: io is not defined

这是我的目录结构:

Judgement
|----node_modules
|----|----express
|----|----socket.io
|----public
|----|----css
|----|----|----judgementMain.css
|----|----js
|----|----|----form.js
|----|----index.html
|----server.js
|----package.json

在我的 index.html 页面中 我有以下指向 socket.io.js 的链接

  <script type="text/javascript" src="socket.io/socket.io.js"></script>
  <script type="text/javascript">
      var socket = io();
  </script>

  <script type="text/javascript" src="js/form.js"></script>

server.js的内容如下

var express = require('express');
var app = express();
var path = require('path');

// Define the port to run on
app.set('port', 3000);
app.use(express.static(path.join(__dirname, 'public')));

// Listen for requests
var server = app.listen(app.get('port'), function() {
    var port = server.address().port;
    console.log('Magic happens on port ' + port);
});

var http = require('http').Server(app);
var io = require('socket.io')(http);

io.on('connection', function (socket) {
    console.log('A user connected');
    socket.on('disconnect', function() {
        console.log('A user disconnected');
    });
});

有人可以解释我做错了什么吗?我只是刚开始使用 node js 和 express 和 socket.io,所以非常感谢任何帮助。

谢谢

【问题讨论】:

  • 如果您在window.loaded 事件中调用io(),它可以正常工作吗?
  • @pay - 没有理由等待窗口加载以使用io()。 Socket.io 与 DOM 无关,因此没有理由在使用之前等待 DOM 加载。

标签: node.js express socket.io


【解决方案1】:

我看到了几个问题:

首先,在您的 HTML 中,它应该是 src="/socket.io/socket.io.js" 并带有前导斜杠。

其次,您正在创建两个 http 服务器,但实际上只启动了其中一个,而您应该只使用一个。你的 socket.io 东西不起作用,因为你给它一个你从未启动过的 http 服务器。

更改为您为 socket.io 提供 express 正在使用并且已在您所需端口上启动的 http 服务器的位置:

var express = require('express');
var app = express();
var path = require('path');

// Define the port to run on
app.set('port', 3000);
app.use(express.static(path.join(__dirname, 'public')));

// Listen for requests
var server = app.listen(app.get('port'), function() {
    var port = server.address().port;
    console.log('Magic happens on port ' + port);
});

var io = require('socket.io')(server);

io.on('connection', function (socket) {
    console.log('A user connected');
    socket.on('disconnect', function() {
        console.log('A user disconnected');
    });
});

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 2014-06-04
    • 2014-10-20
    • 2019-01-26
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 2013-11-06
    • 2013-10-25
    相关资源
    最近更新 更多