2011-08-03 173 views
0
var http = require('http') 
, io = require('socket.io') 
, fs = require('fs') 
, url = require('url') 
, server; 

server = http.createServer(function(request, response) { 
    var pathname = url.parse(request.url).pathname; 

    console.log("Request for: " + request.method + ' ' + pathname); 
    switch(request.method + ' ' + pathname) { 
    case 'POST /notify': 
     var data = ""; 
     request.addListener('data', function(chunk) { 
     data += chunk; 
     console.log(data); 
     }); 
     console.log(data); 
     response.end(); 
     break; 
    default: 
     response.writeHead(404); 
     response.end(); 
     break; 
    }; 
}); 

server.listen(3526); 

var io = io.listen(server); 

io.sockets.on('connection', function (socket) { 
    socket.emit('notifications', { demo: 'test' }); 
}); 

我知道這可能是一個愚蠢的問題,但爲什麼我不能訪問我的數據變量之外的request.AddListener塊嗎?爲什麼我的var不可訪問?

請提供解決方案。

回答

3

因爲Node一直在運行,當你到達第二個console.log數據時,它並沒有被填充。我添加了一個監聽器,以便它更好地工作

server = http.createServer(function(request, response) { 
     var pathname = url.parse(request.url).pathname; 
     var data = ""; 
     console.log("Request for: " + request.method + ' ' + pathname); 
     switch(request.method + ' ' + pathname) { 
     case 'POST /notify':  
      request.addListener('data', function(chunk) { 
      data += chunk; 
      console.log('data1: '+data); 
      });    
      break; 
     default: 
      response.writeHead(404); 
      response.end(); 
      break; 
     }; 
     request.addListener('end',function(){ 
     console.log('data2: '+data); 
     response.end(data); 
     });   
    }); 
相關問題