尝试获取socket.io时出错404

时间:2016-07-20 09:15:22

标签: javascript node.js express socket.io http-status-code-404

我正在编写一个使用socket.io为网页提供服务的节点服务器。但是当我加载页面时,控制台显示错误

  

(指数):6获取http://localhost:3000/socket.io/socket.io.js

,毫不奇怪,其次是:

  

(index):51未捕获的ReferenceError:未定义io

当我检查网络选项卡中页面加载的文件时,它显示socket.io的错误404。但令人惊讶的是,当我启动其他程序时,我使用socket.io,一切正常。唯一的区别是,对于这一个,我使用快递。

这是我的代码:

app.js:

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

app.use(express.static("./app"));  

app.get("/", function(req, res, next) {
  res.sendFile(__dirname + "/index.html")
});

app.listen(3000);
console.log("Server started in http://localhost:" + 3000);


io.on('connection', function(socket){
  socket.emit('news', {hello :'world'});
  socket.on('my other event', function(data){
    console.log(data);
  });
});

index.html:

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <script src="/socket.io/socket.io.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>

[Some unrelated text]

<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function(data){
    console.log(data);
    socket.emit('my other event', {my: 'data'});
  });

</script>

</body>
</html>

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

更改

app.listen(3000);

server.listen(3000);

您的socket.io已附加到http服务器server。 见行:var io = require('socket.io')(server);  而不是快递服务器app

很明显,socket.io无法提供任何服务,因为它预期的服务器从未开始监听。

TESTED!这个答案在我的本地环境中成功复制!!