2013-04-09 19 views
6

Tôi có đoạn mã này:Yêu cầu không kết thúc bằng Node.js (được sử dụng để làm việc)

var app = require('http').createServer(function(req, res){ 
    console.log(req); 
    req.addListener('end', function() { 
     fileServer.serve(req, res); 

    }); 
}); 

var statics = require('node-static'); 
var fileServer = new statics.Server('./'); 

app.listen(1344, '127.0.0.1'); 

app.on('error', function(err){ 
    console.log(err); 
}) 

Nó được làm việc tốt, cho đến khi tôi thực hiện một vài thay đổi, nút cho một lỗi, và khi Tôi đã quay lại, lỗi đó không còn ở đó nữa, nhưng thay vì làm việc như nó đã hoạt động trước khi sự kiện end không được kích hoạt. Vì vậy, bất cứ điều gì bên trong req.addListener('end', function(){}); không được gọi.

Và ngay cả khi tôi chạy một node.js khác sử dụng cùng một sự kiện, cũng không được kích hoạt. Vì vậy, cũng giống như nếu sự kiện kết thúc của yêu cầu bị hỏng. Nhưng làm sao điều đó có thể được?

Đây không phải là lần đầu tiên nó xảy ra. Lần cuối tôi kết thúc nút cài đặt lại (sau khi thử nhiều thứ khác nhau). Tôi muốn tìm một giải pháp, vì vậy tôi có thể hiểu được vấn đề!

LƯU Ý: Mã gốc bao gồm socket.io và các loại kết nối khác, nhưng tôi vừa dán đoạn mã là ứng dụng bị kẹt.

Cũng có thể hữu ích khi biết cách gỡ lỗi vấn đề!

+0

thử với 'Node v0.8.x' hoặc đọc Stream2 documenation trong http://nodejs.org – InspiredJW

+0

Tôi không thể nói về việc liệu 'fileServer.serve' hoạt động, nhưng nếu bạn lấy ra mọi thứ liên quan đến 'node-static', mã của bạn hoạt động như là-và sự kiện' end' chắc chắn được gọi. Tôi nhớ có vấn đề khi chúng tôi đã thử bằng cách sử dụng 'nút-tĩnh' và bạn có thể tốt hơn bằng cách sử dụng phần mềm trung gian tĩnh từ Kết nối nếu đó thực sự là vấn đề của bạn. http://www.senchalabs.org/connect/static.html –

+0

@InspiredJW Tôi đang ở v0.10.3. Bạn đang nói tôi nên hạ cấp? – limoragni

Trả lời

13

@InspiredJW sẽ nhận được tín dụng để chỉ ra điều này, vì tôi đã quên nó, nhưng chắc chắn vấn đề của bạn là do những thay đổi trong các dòng có thể đọc được. Để sự kiện end được gọi cho bạn hoặc phải đính kèm người nghe vào sự kiện data hoặc bạn phải gọi stream.resume().

require('http').createServer(function(req, res){ 
    req.addListener('end', function() { 
     // won't ever get called in node v0.10.3 
    }); 
}); 

require('http').createServer(function(req, res){ 
    req.addListener('end', function() { 
     // will get called in node v0.10.3 because we called req.resume() 
    }); 
    req.resume(); 
}); 

require('http').createServer(function(req, res){ 
    req.on('data', function (chunk) { }); 

    req.addListener('end', function() { 
     // also will get called because we attached a data event listener 
    }); 
}); 

http://nodejs.org/api/stream.html#stream_compatibility

+0

Tuyệt. Đang làm việc. Những gì tôi không thể hiểu, là làm thế nào đến làm việc ở nơi đầu tiên! Tôi mới vào node.js Tôi sẽ phải đọc rất nhiều thứ để làm việc. Bạn có biết một cuốn sách hay về nút? Tôi biết rằng Apress đang làm việc trên một, nhưng tôi muốn có một ngay lập tức. Cảm ơn! – limoragni

+0

Tôi không, xin lỗi. Tôi chỉ học được nút bằng cách sử dụng nó. Nó có thể làm việc trước đây bởi vì bạn đã có một trình nghe sự kiện ''data'' đính kèm, hoặc bạn đang sử dụng một phiên bản cũ của nút. –

+0

@limoragni bạn có thể nâng cấp nút lên v0.10.3 trở lên và đó là nguyên nhân khiến nó ngừng hoạt động. – Chev

Các vấn đề liên quan