2016-04-11 6 views
0

私は自宅でnode.jsベースのWebサーバーを実行しており、ログインフォームを実装しようとしています。POSTデータを非同期で収集する

基本的に私はPOSTされたデータ(ログイン/パスワード)にアクセスする必要があります。私はこれが見つかりました: How do you extract POST data in Node.js? を(req.on( 'データ' ...)& req.on( '終了' ...))

しかし、私は非同期的にこれを行う必要があり、誰かがどのように私に言うことができますそれを行う ? (私は非ブロッキングではなく、ブロックされるように、このコードが必要)

EDIT:すべての私のコードはGitHubの上で提供されています: https://github.com/Fointard/NodeJs/tree/authentication 問題はここにある:https://github.com/Fointard/NodeJs/blob/authentication/js/reqHandlers/auth.js線98と104を、私はデータ」に頼っています'と' end 'が行なわれますが、checkID()(行95)が真または偽を返すように非同期的に行いたいと思います。

+0

あなたはいくつかのコードを提供することはできますか?あなたは今まで何をしていますか?あなたはノードのhttpサーバ、特急などを使用していますか? – goenning

+0

あなたは、あなたがそれを「ブロックする」だけでなく「非同期的に」必要としていると言います。それは意味をなさない。 – goenning

+0

待ちます。同期はブロックされており、非同期はブロックされていませんか? もしそうなら、私の悪い、私は同期的に意味した。 – Fointard

答えて

0

できません。 HTTP要求はI/O操作であり、常に非同期的に解決されます。 checkID関数は決して値を返しません。 trueまたはfalseで呼び出される2番目のパラメータ(通常callback)を追加する必要があります。

function checkID(req, callback) { 
    var body = ''; 
    req.on('data', function (data) { 
    body += data; 
    if (body.length > 1e6) 
     req.connection.destroy(); 
    }); 

    req.on('end', function() { 

    var post = qs.parse(body); 

    if ('loginInputLogin' in post && 'loginInputPassword' in post) { 
     console.log('login : '+post['loginInputLogin']); 
     console.log('password : '+post['loginInputPassword']); 
    } 

    if (post['loginInputLogin'] === 'fointard' && post['loginInputPassword'] === 'f01n') { 
     console.log('ID confirmed'); 

     callback(true); 
    } 

    callback(false); 
    }); 
} 

そしてそうのようにそれを使用します。

checkID(yourRequest, function(success) { 
    if(success) { 
    //login successfull 
    } else { 
    //login failed 
    } 
}) 
関連する問題