2011-07-07 18 views
12

node.jsサーバーにデータチャンクを送信しているクライアントがあります。Node.js HTTP:リクエスト 'end'イベントが呼び出されない

「終了」イベントをリッスンし、累積されたリクエスト本文を取得します。

app.post('/users', function(req, res){ 

    req.on('end', function() { // WHY IS THIS NEVER FIRED? 
    console.log(req.body); 

    res.send({ 
     "status": "ok" 
    }); 

    }); 

}); 

問題は「終了」イベントが発生することはないということです。

は、ここに私のコードです。

誰でも知っていますか?

また、私がこのようにすると、req.bodyがすべてのボディチャンクの蓄積されたボディになるのでしょうか?

答えて

2

基本的にhttp POSTは、サーバーにPOSTするときにのみ起動します。私は確信することはできませんが、私はあなたのウェブブラウザにserver:port/usersを訪問しようとしているだけで、応答を得られないと仮定しています。デフォルトでは、Webブラウザはサーバーになります。これを修正するには2つの方法があります。あなたはapp.getapp.postを変更する場合は、/users

2.をご覧いただくか、フォームを使用して、ポスト機能を起動することができたときに

1.イベントが正常に起動します。たとえば、次のコードは、GETを使用してページにアクセスするとフォームを表示します。フォームを提出すると、POSTが発射されます。

var express = require('express'), 
    app = express.createServer(); 

app.listen(1337, "127.0.0.1"); 

app.get('/users',function(req,res){ 
    res.send('<form method="post" action="/users"><input type="submit" value="Submit" /></form>'); 
}) 

app.post('/users', function(req, res){ 
    req.on('end', function() { 
    console.log('success'); 
    res.send('success!!!'); 
    }); 
}); 
+2

あなたは誤解しています。クライアントがPOST要求を発しています。 POSTハンドラが実行されていますが、問題は 'end'イベントが発生していないということです。理由はわかりません。 – ajsie

+0

私にとっては、node.jsを再インストールしてみてください。私は状況を推測した。あなたが投稿した最初のコードは、私がページに正しくPOSTしてくれれば私にとってもうまくいきます。もう少し診断をしてください。 – William

+0

私はこの同じ問題を抱えています。何らかのアップグレードが動作しなくなったあと、永遠に働くために使用されたコード – les2

2

私は同じ問題が発生し、この議論が役に立ったと評価: My http.createserver in node.js doesn't work?

単に行挿入することで、置く:.createServerループの内側 request.on("data",function() {}) をしかしrequest.onループはそれが働かせた後。

+0

これがなぜであるかの詳細については、こちらをご覧ください(具体的には、フローモードと一時停止モードに関するビット):https ://nodejs.org/api/stream.html#stream_class_stream_readable –

関連する問題