Node.js最简单的代码不起作用

时间:2014-01-28 12:52:54

标签: javascript html5 node.js websocket socket.io

因为我是Node.js的新手,正在学习不同的文章。所以,据我所知,我的代码是

在服务器端使用 app.js

var http = require('http');

var app = http.createServer(function(req,res)
{
    req.on('end',function()
    {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello');
    });
});

var io = require('socket.io').listen(app);

io.sockets.on('connection',function(socket)
{
    socket.emit('connect',{msg:'Hello Client'});
    socket.on('client_Says',console.log);
});

app.listen(3000);

在客户端使用 index.html

<script type="text/javascript" src="//localhost:3000/socket.io/socket.io.js"></script>
<script type="text/javascript">
var socket = io.connect('//localhost:3000');
socket.on('connect',function(data)
{
    alert('Server says '+data.msg);
    socket.emit('client_Says',{data:'Hello Server'});
});
</script>

我在上面的代码中做错了什么?当我在控制台中运行app.js时,它说 info - socket.io已启动,但当我运行 http:// localhost:3000 时,它只是继续请求服务器。

此外我想知道,无论我在电脑上的哪个位置创建我的Node文件夹,并将 app.js index.html 文件放在上面,它在浏览器中运行 http:// localhost:3000 会在Node控制台中运行app.js后自动将该文件夹作为localhost的站点文件夹吗?

2 个答案:

答案 0 :(得分:0)

在你的app.js更新代码中

 var http = require('http'),
     fs = require('fs'), //<--- File Module
     index = fs.readFileSync(__dirname + '/index.html');

 var app = http.createServer(function(req,res)
 {
      res.writeHead(200, {'Content-Type': 'text/html'}); //<-Updated to text/html
      res.end(index); //<---I am sending page
 });

希望能解决您的问题

答案 1 :(得分:0)

你不应该在服务器端这样做:

socket.emit('connect',{msg:'Hello Client'});

因为connect是从服务器成功连接时发出的默认事件。因此,当客户端连接时,服务器会触发其默认的“连接”事件,但此处您还会触发名为connect的事件,这可能会导致问题。