2017-04-12 22 views
0

サーバーとクライアントの間にjsonオブジェクトを渡そうとしています。サーバー側は次のようになります。HTMLクライアントとnode.jsサーバー間でデータを交換するボタンのeventListener

var express = require('express'); // Express web server framework 
var request = require('request'); // "Request" library 
var querystring = require('querystring'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require("body-parser"); 


var app = express(); 
app.use(express.static("public")); 

app.engine('html', require('ejs').renderFile); 
app.set('view engine', 'html'); 

app.post("/", function (req, res) { 

    console.log('Request received'); 
    var return_value; 

    req.on('data', function (chunk) { 
     console.log('GOT DATA!'); 
     json = JSON.parse(chunk); 
     json.access_date = "12.04.17"; 
     return_value = JSON.stringify(chunk); 
    }); 

    res.writeHead(200, { 
     'Content-Type': 'application/json;charset=UTF-8', 
     'Access-Control-Allow-Origin': '*' 
    }); 
    res.json(return_value); 

}) 


var server = app.listen("8080") 
console.log('Server running port 8080/'); 

ボタンには次の機能があります。

<script type="text/javascript"> 
document.getElementById("myBtn").addEventListener("click", passArg); 

function passArg() { 
    console.log("I'm here") 
    var xmlhttp = new XMLHttpRequest(); 

    xmlhttp.open("POST", "/", true); 
    xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); 

    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == XMLHttpRequest.DONE) { 
      if (xmlhttp.status == 200) { 
       //var json = JSON.parse(xmlhttp.responseText); 
       console.log("Data passed back: " + xmlhttp.responseText) 
      } 
      else if (xmlhttp.status == 400) { 
       alert('There was an error 400'); 
      } 
      else { 
       alert('something else other than 200 was returned'); 
      } 
     } 
    } 

    var data = JSON.stringify({"email":"[email protected]","password":"101010"}); 
    xmlhttp.send(data); 
} 
</script> 

は今コンソールログをクリックすると、「私はここにいる」ファイントリガーが、関数は、コードのPOST部に404エラーを返します。私はまた、サーバーからクライアントにデータを戻す方法を完全には理解していません。メソッドres.end()は正しい方法でしょうか?

EDIT:回答を反映するためにスクリプトを編集しました。

答えて

0

2変更I postルートサーバ側を追加します必要性を参照してください

@charietflは、expressエンドポイントへのパスを含めるだけで、おそらくxmlhttp.open()コールを簡略化できます。

あなたは現在、/callbackエンドポイントに電話していませんので、私はあなたのxhtmlhttp.open()コールに入れます。

xmlhttp.open('POST', '/callback')

ような何か@Bshapsが述べたように、あなたもGET要求を期待しているエンドポイントを持っていますが、あなたがそうする

app.get("/callback"... 

を変更POSTを使用しているに

app.post("/callback"... 
+0

ありがとう、それはすごくうまくいった。しかし、私はまだクライアントにオブジェクトを送り返す方法について固執しています。もしあなたがそれについていくらか光を当てることができたら、私は本当にそれを感謝するでしょう。 – Copperwire

0

問題は、サーバーが投稿リクエストを受信して​​いますが、ルートは取得リクエストのためです。

変更:

app.get("/callback", function(req, res){ 

へ:

app.post("/callback", function(req, res){ 
0

ブラウザのdevのツール、ネットワーク内の実際の要求を調べます。おそらく要求が'http://localhost:8080/localhost:8080にあるでしょう... URLにプロトコルを追加

xmlhttp.open("POST", "http://localhost:8080") 

それともとして設定使用:

xmlhttp.open("POST", "/") 

そして

関連する問題