2016-11-07 6 views
0

node.js、html、およびjsを使用して登録ページを作成しようとしています。私のログインコマンドは機能しますが、同じコードを少しコピーして修正しようとしましたが、登録できませんでした。ブラウザにタイプエラーが表示されます。サーバーは正常に動作します。私は、カールを使用してコマンドを送信しようとしたが、それもうまく動作します。JSのPOSTリクエストでJSON文字列値が正しく読み取られない

curl -XPOST -H 'Content_Type: application/json' --data '{"username":"rkmenon235","password":"rkm235"}' http://eorlundgraymane.imad.hasura-app.io/create-user 

私が投稿するWebページを使用するときに私が手にエラーがこれは私のJavascriptコード(main.js)私は登録コマンドのために使用され、この

TypeError: Not a buffer 
    at TypeError (native) 
    at pbkdf2 (crypto.js:562:20) 
    at Object.exports.pbkdf2Sync (crypto.js:553:10) 
    at hash (/home/rkm/Desktop/webapp/imad-2016-app/server.js:22:22) 
    at /home/rkm/Desktop/webapp/imad-2016-app/server.js:62:17 
    at Layer.handle [as handle_request] (/home/rkm/Desktop/webapp/imad-2016-app/node_modules/express/lib/router/layer.js:95:5) 
    at next (/home/rkm/Desktop/webapp/imad-2016-app/node_modules/express/lib/router/route.js:131:13) 
    at Route.dispatch (/home/rkm/Desktop/webapp/imad-2016-app/node_modules/express/lib/router/route.js:112:3) 
    at Layer.handle [as handle_request] (/home/rkm/Desktop/webapp/imad-2016-app/node_modules/express/lib/router/layer.js:95:5) 
    at /home/rkm/Desktop/webapp/imad-2016-app/node_modules/express/lib/router/index.js:277:22 

です。

var regy = document.getElementById('signupbutton'); 
regy.onclick = function(){ 
    var request = new XMLHttpRequest(); 
    request.onreadystatechange = function(){ 
     if(request.readyState === XMLHttpRequest.DONE){ 
      if(request.status === 200) 
       { 
        console.log("user created"); 
        alert("Creates Account successfully");  
       } 
      else if(request.status === 403){ 
       alert('Something is 404'); 
      } 
      else if(request.status === 500){ 
       alert('Something is wrong on the server 500'); 
      } 
     } 
    }; 
var username = document.getElementById('username').value; 
var password = document.getElementById('password').value; 
console.log(username); 
console.log(password); 
request.open('POST','http://localhost:8080/create-user',true); 
request.setRequestHeader('Content-Type', 'application/json'); 
request.send(JSON.stringify({username:username,password:password})); 
}; 

これは、POSTリクエスト

に応答私のサーバーコード(server.js)である私は私のサーバー・コード

var express = require('express'); 
var morgan = require('morgan'); 
var path = require('path'); 
var Pool = require('pg').Pool;//Postgres connetion pool 
var crypto = require('crypto'); 
var bodyParser = require('body-parser'); 

var app = express(); 
app.use(morgan('combined')); 
app.use(bodyParser.json()); 

の上部にこれを持ってそれから私は、この特定の要求を持っていますハンドラ(server.jsのも一部)

app.post('/create-user',function(req,res){ 

    var username = req.body.username; 
    var password = req.body.password; 
    var salt = crypto.randomBytes(128).toString('hex'); 
    var dbString = hash(password,salt); 
    pool.query('INSERT INTO users (username,passwordhash) VALUES ($1,$2)',[username,dbString],function(err,result){ 
      if(err){ 
      res.status(500).send(err.toString()); 
     } 
     else 
      { 
        res.send('User Successfully created !'+username); 
      } 
    }); 
}); 

これは、HTMLコード

0123です
<html> 
    <link href = "/loginstyle.css" rel="stylesheet"> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
    <script type = "text/javascript" src = "/scripts/coderider"></script> 
    <body id = "bodyback"> 
     <div id = "container"> 
     <div id = "loginpane"> 
      <form action = "/create-user" method = "POST"> 
      <input type = "text" name = "username" id = "username" placeholder = "Username"/><br> 
      <input type = "password" name = "password" id = "password" placeholder = "Password"/> 
      <br> 
      <input type = "submit" id = "signupbutton" name = "signupbutton" value = "Sign Up"/> 
      <br> 
      </form> 
     </div> 
     </div> 
    </body> 
</html> 
    <script type = "text/javascript" src = "/main.js"></script> 

私は、ターミナルからCURLを使用すると、コードはうまく動作しますが、私はjavascriptを使用してhtmlページからのPOST呼び出しを使用して登録できません。

ご協力いただきありがとうございます。

+0

あなたの 'username'と' password'は 'string'値として正しく渡されていますか? –

+0

main.jsコードの直後にserver.js設定コードを表示するように私の質問を編集しました – CodeRider

+0

あなたはinsertステートメントで登録中にこのエラーが発生しますか? –

答えて

0

クロスドメインリクエストに問題があると思います。 問題は、私は、ログインの両方のためにスクリプトリンクを与えられ、同じファイルにページを提出していたことだったあなたのNode.js

res.header("Access-Control-Allow-Origin", "*"); 
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization"); 
+0

Nopeはまだ同じエラーですが、助けてくれてありがとう – CodeRider

0

にヘッダを追加してください。テキスト要素は同じスクリプトで作成されましたが、2つの異なるファイルです。要素がdocument.getElementbyId();を使用して呼び出される準備ができていないため、これは保証されたタスクではありませんでした。

私はページごとに別々のスクリプトを作成し、ドキュメント要素を呼び出しました。今回はconsole.loを使ってデバッグしてみましたが、それは魅力的でした。

関連する問題