2016-11-14 11 views
0

モジュールp-11(認証、ハッシュ、カールなど)に従っていて、作成ユーザーを実行したいが、何とか動作しない。 問題は、送信ボタンをクリックするとすぐに、私はバッファエラーではなくなっています。 何が間違っているかわからないエクスプレスjsノードでバッファエラーが発生しない

私はエラーを取得しておいてください。例外TypeError:私はすでに身体・パーサと暗号化を必要としていないバッファ

。 ここserver.jsで関連するコードです:

function hash(input,salt){ 
     //how to create hash 
     var hashed = crypto.pbkdf2Sync(input,salt, 10000, 512, 'sha512'); 
     return ['pbkdf2Sync',salt,hashed.toString('hex')].join('$'); 
    } 

    app.post('/create-user',function(req,res){ 
     //take username and password as input and create entry in user table 
     var username = req.body.username; 
     var password = req.body.password; 
     console.log(username); 
     var salt= crypto.randomBytes(128).toString('hex'); 
     var dbString = hash(password,salt); 

     pool.query('INSERT INTO "user"(username,password) VALUES($1,$2)',[username,dbString],function(err,result){ 
     if(err){ 
      res.status(500).send(err.toString()); 

     }else{ 
      res.send('user succesfully created'+username); 
     } 
     }); 
    }); 

    app.get('/hash/:input',function(req,res){ 
     var hashString = hash(req.params.input,'this-is-some-random-string'); 
     res.send(hashString); 
    }); 

そしてここでは、関連するコードは、main.js

var submitButton = document.getElementById('submit_btn'); 
submitButton.onclick = function(){ 
    var request = new XMLHttpRequest(); 

    request.onreadystatechange=function(){ 
     if(request.readyState===XMLHttpRequest.DONE && request.status ===200){ 
      var data = JSON.parse(request.responseText); 
      console.log(data); 
     } 
    }; 

    var username = document.getElementById('username').value; 
    var password = document.getElementById('password').value; 
    request.open('POST','http://localhost:8080/create-user',true); 
    request.send(JSON.stringify({username:username,password:password})); 
}; 

だここで私は

TypeError: Not a buffer 
    at TypeError (native) 
    at pbkdf2 (crypto.js:562:20) 
    at Object.exports.pbkdf2Sync (crypto.js:553:10) 
    at hash (D:\imadtw\server.js:119:23) 
    at D:\imadtw\server.js:129:18 
    at Layer.handle [as handle_request] (D:\imadtw\node_modules\express\lib\router\layer.js:95:5) 
    at next (D:\imadtw\node_modules\express\lib\router\route.js:131:13) 
    at Route.dispatch (D:\imadtw\node_modules\express\lib\router\route.js:112:3) 
    at Layer.handle [as handle_request] (D:\imadtw\node_modules\express\lib\router\layer.js:95:5) 
    at D:\imadtw\node_modules\express\lib\router\index.js:277:22 
    at Function.process_params (D:\imadtw\node_modules\express\lib\router\index.js:330:12) 
    at next (D:\imadtw\node_modules\express\lib\router\index.js:271:10) 
    at jsonParser (D:\imadtw\node_modules\body-parser\lib\types\json.js:112:7) 
    at Layer.handle [as handle_request] (D:\imadtw\node_modules\express\lib\router\layer.js:95:5) 
    at trim_prefix (D:\imadtw\node_modules\express\lib\router\index.js:312:13) 
    at D:\imadtw\node_modules\express\lib\router\index.js:280:7 

EDITを取得していますエラーメッセージがあります:私はちょうど何かを試みた。 私はユーザー名とパスワードの値を(実験と同様に)ハードコードしても大丈夫ですが、req.bodyを使ってユーザー名とパスワードの値を取得しようとするとうまくいきません。 本文から値を取得するようですここの難しい部分です。

ここで私は

<!doctype html> 
<html lang="en"> 
<head> 

<meta name="viewport" content="width=device-width, initial-scale=1"> 

<!-- jQuery library --> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 

<!-- Latest compiled JavaScript --> 
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 

<!-- Latest compiled and minified CSS --> 
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 

<!-- Fontawesome library --> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"> 



<link rel="stylesheet" type="text/css" href="/ui/profile.css"> 
<script type="text/javascript" src="/ui/main.js" ></script> 
</head> 

<body> 
<!--Navbar Begins --> 
    <nav class="navbar navbar-fixed-top scrolltop" id="navigation"> 
    <div class="container"> 
     <!-- navbar header begins --> 
     <div class="navbar-header"> 
     <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse"> 
<span class="sr-only">Toggle Navigation</span> 
<span class="icon-bar"></span> 
<span class="icon-bar"></span> 
<span class="icon-bar"></span> 
    </button> 
     <a class="navbar-brand" href="#">Faraz Ahmed</a> 

     </div> 
     <!-- navbar header ends --> 

     <!-- div collapse begins --> 
     <div class="collapse navbar-collapse" id="navbar-collapse"> 
     <ul class="nav navbar-nav navbar-right"> 
      <li class="active"><a href="#aboutme">About</a></li> 
      <li><a href="#portfolioz">Portfolio</a></li> 
      <li><a href="#contactme">Contact</a></li> 
     </ul> 
     </div> 
     <!-- div collapse ends --> 
    </div> 
    <!-- container ends --> 
    </nav> 
    <!--Navbar ends --> 

    <div class="container-fluid"> 
    <div class="row" id="fullBody"> 


     <div class=" col-md-12 col-sm-12 col-xs-12" id="column-main"> 
     <div id="aboutme" class="about"> 
     <div class="row"> 

     <div class="col-lg-12 col-md-12 col-sm-12"> 
      <div id="img"><img class="img-responsive" src="http://res.cloudinary.com/whizzy/image/upload/v1454699647/faraz_qwdqrx.jpg" alt=""></div> 

     <!-- <hr class="hr1"><i class="fa fa-star"></i><hr class="hr2"> --> 

      <p class="aboutpara scrollz"></br>I am a self taught web developer who has learnt html,css, Javascript,Jquery and bootstrap too. I keep building websites and other apps to practice what I have learnt. This site is responsive. Go ahead and take a look at it in your mobile and see how they adjust to your screen size.</p> 
     </div> 
     </div> 
    </div><!-- aboutme div ends --> 

    <div class="user"> 

<p> 
    <form method="post" action="/create-user" > 
    <input type="text" id="username" placeholder="username"> 
    <input type="password" id="password" name="password"> 
    <input type="submit" id="submit_btn" value="Submit" class="btn btn-warning"> 
</form> 
</p> 

<ul id="namelist"> 


</ul> 




    </div><!-- requestz div ends --> 

<div id='twitterDiv' class="row"> 
    <div class="col-lg-12 col-md-12 col-sm-12"> 
    <h3>Tweets Here</h3> 
    <input type="text" id="tweetSearch" placeholder="enter keyword to search for"></input> 
    <button id="tweetButton" type="submit">Submit</button> 
<p id="tweetz">tweets appear here</p> 

</div><!--column ends --> 
</div><!--row ends --> 

     </div><!--2nd column ends --> 



    </div><!-- main row ends --> 





    </div><!-- container-fluid div ends --> 
</body> 

</html> 
+0

エラーポイントはどの行にありますか? – mscdex

+0

まあ、元の投稿に完全なエラーメッセージを投稿しました。 – faraz

+0

'req.body.password'は文字列ですか? – mscdex

答えて

0

からの入力値が正しい身体のコンテンツタイプを設定していることを確認したいページのHTMLです:あなたのhtmlによると

request.open('POST','http://localhost:8080/create-user',true); 
request.setRequestHeader('content-type', 'application/json'); 
request.send(JSON.stringify({username:username,password:password})); 
+0

私はあなたが何を意味するか分かりません。 あなたは少し説明できますか? – faraz

+0

Express(JSONを送信している)をExpress(あるいは、body-parserミドルウェア)に伝えていないと、リクエストデータがURLエンコード形式であるとみなされます。状況。 – robertklep

+0

私はあなたがrequest.setRequestHeader( 'content-type'、 'application/json')を書きませんでした。私はそれを書いたことを伝えるべきです。 か、別の意味ですか? – faraz

0

は、あなたではないですusernameフィールドにname属性を設定します。これは、HTMLフォームが送信されたときにフィールドがサーバーに送信されないことを意味します(XHRとは別に)。

EDIT:これはおそらくpbkdf2Sync()の特定の問題とは関係ありませんが、ユーザー名の値は考慮されていないためです。

+0

することができます。私にチェックさせてください – faraz

関連する問題