2011-07-20 166 views
2

我是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=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); 

我遇到的問題是:

  1. 我沒有得到在瀏覽器這行代碼一個值得歡迎的消息:res.write(「歡迎」) ;但是,我得到終端下方的console.log()消息

  2. 我發出的userjoined事件沒有被捕獲。但是,在關閉服務器之後,所有事情都立即發生。我在瀏覽器中收到歡迎消息,並收到userjoined事件的回調。

有人能告訴我這裏怎麼了?由於

+0

你叫respond.end,我失蹤了嗎?您必須告訴它將流寫入瀏覽器,而不是緩衝它。 – jcolebrand

+0

我不想調用將關閉連接的response.end()bcoz。我希望它保持活力。反正,問題似乎與node0.5.0版本。相同的代碼在node0.4.9版本中起作用:/ – CuriousCoder

+0

您是否嘗試使用套接字?您仍然必須通知服務器每隔一段時間向客戶端發送一次信息。至少是沖水。 – jcolebrand

回答

2

確定有幾個問題:

  1. 你需要聲明E.ON userjoined你叫
  2. 你需要一個res.end()在E.ON userjoined之前。

這裏是代碼固定:

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); 
+0

問題是bcoz如果response.end。但是,我不想調用response.end bcoz來關閉連接。此問題僅在node0.5.0中發生...不在node0.4.9中 – CuriousCoder