我正在使用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,所以任何帮助都会受到赞赏。
由于
答案 0 :(得分:0)
我看到了几个问题:
首先,在您的HTML中,它应该是带有前导斜杠的src="/socket.io/socket.io.js"
。
其次,您创建了两个http服务器,但实际上只启动其中一个,当您只使用一个时。你的socket.io东西不起作用,因为你给它一个你从未开始的http服务器。
更改为您为socket.io提供表达正在使用且已在所需端口上启动的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');
});
});