Events Node.js代码问题

Events Node.js代码问题,events,node.js,Events,Node.js,我是node.js的新手。我正在尝试的代码中有一些问题。看看代码: var http =require('http'); var url = require('url'); var events=require('events'); var e=new events.EventEmitter(); var i=0; var clientlist=new Array(); function user(nam,channel) { this.nam = nam; this.chan=channe

我是node.js的新手。我正在尝试的代码中有一些问题。看看代码:

var http =require('http');
var url = require('url');
var events=require('events');
var e=new events.EventEmitter();

var i=0;
var clientlist=new Array();

function user(nam,channel) {
this.nam = nam;
this.chan=channel;
}

server = http.createServer(function(req,res) {
res.writeHead(200,{'Content-Type':'text/html'});
res.write('welcome');

var pathname = url.parse(req.url).pathname;
pathname=pathname.substring(1);
pathnames=pathname.split("&");
var c=new user(pathnames[0],pathnames[1]);
clientlist[i++]=c;

console.log("user "+pathnames[0]+" joined channel "+pathnames[1]);

e.emit('userjoined',clientlist[i-1].nam,clientlist[i-1].chan);

e.on('userjoined',function(n,c) {
res.write("new user joined with name: "+n+" and he joined channel "+c+"\n");
});

});
server.listen(2000);
我遇到的问题是:

  • 我在浏览器中没有收到这行代码的欢迎信息:res.write(“欢迎”);但是,在终端中,我在它下面得到console.log()消息

  • 未捕获我发出的userjoined事件。但是,在我关闭服务器之后,一切都会立即发生。我在浏览器中收到欢迎消息,以及userjoined事件的回调


  • 有人能告诉我这里出了什么问题吗?谢谢

    好的,有几个问题:

  • 在调用之前,需要声明e.on userjoined
  • 在e.on userjoined中需要一个res.end()
  • 以下是修复代码:

    var http =require('http');
    var url = require('url');
    var events=require('events');
    var e=new events.EventEmitter();
    
    var i=0;
    var clientlist=new Array();
    
    function user(nam,channel) {
    this.nam = nam;
    this.chan=channel;
    }
    
    e.on('userjoined',function(res,n,c) {
    console.log("iuser "+pathnames[0]+" joined channel "+pathnames[1]);
    res.write("new user joined with name: "+n+" and he joined channel "+c+"\n");
    res.end();
    });
    
    server = http.createServer(function(req,res) {
    res.writeHead(200,{'Content-Type':'text/html'});
    res.write('welcome');
    
    var pathname = url.parse(req.url).pathname;
    pathname=pathname.substring(1);
    pathnames=pathname.split("&");
    
    var c=new user(pathnames[0],pathnames[1]);
    clientlist[i++]=c;
    
    console.log("user "+pathnames[0]+" joined channel "+pathnames[1]);
    
    e.emit('userjoined',res,clientlist[i-1].nam,clientlist[i-1].chan);
    
    });
    server.listen(2000);
    

    你是在打电话给Response.end而我却错过了?您必须告诉它将流写入浏览器而不是缓冲。我不想调用response.end()bcoz来关闭连接。我想让它活着。无论如何,问题似乎出在node0.5.0版本上。相同的代码在node0.4.9版本中工作:/n您是否尝试使用套接字?您仍然需要告诉服务器每隔一段时间向客户端发送一次信息。至少是冲洗。@jcolebrand:我没有使用插座。我试图做的是,保持连接打开,并在事件发生时向客户端发送数据。我查看了socket.io,但由于某种原因,我甚至无法让hello world程序工作。socket.io文档高度不一致。你认为这是一个更好的选择吗?是的,我知道这是为了你所描述的。问题是bcoz if response.end。但是,我不想呼叫response.end bcoz,这将关闭连接。此问题仅在节点0.5.0中出现。。。不在节点0.4.9中