6

私はこのコードを持っています:

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);
})

いくつかの変更を加えるまでは問題なく動作していましたが、ノードでエラーが発生し、戻ったときにそのエラーはもうありませんでしたが、endイベントが発生する前に動作していたように動作する代わりに。そのため、内部req.addListener('end', function (){});は呼び出されません。

同じイベントを使用する別の node.js を実行しても、起動されません。リクエストの終了イベントが壊れている場合も同様です。しかし、どうしてそれが可能になるのでしょうか?

それが起こるのは初めてではありません。前回、ノードを再インストールすることになりました(さまざまなことを試した後)。問題を理解できるように、解決策を見つけたいと思います。

注: 元のコードには socket.io やその他の種類の接続が含まれていますが、アプリがスタックしているコードの一部を貼り付けただけです。

問題をデバッグする方法を知っておくことも役に立ちます!

4

1 に答える 1

14

@InspiredJWは、私がそれを忘れていたので、これを指摘した功績を認めるべきですが、間違いなくあなたの問題は読み取り可能なストリームの変更によるものです. イベントが呼び出されるようにするendには、リスナーをイベントにアタッチするか、dataを呼び出す必要があります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

于 2013-04-09T16:47:11.283 に答える