2016-10-12 6 views
0

私は、反応を使用して自分のAPIにデータを送信しています。私が作るすべてのPOSTリクエストは私にOPTIONSリクエストを与えます。これを修正する必要があります。私はいくつかのプリフライト構造をする必要があるかもしれないと思っていますが、それについて読んだ後も、それを実装する方法はまだ分かりません。私は私のようにAPIに接続しています現時点ではNodejsサーバからCORSを有効にする方法

は...

fetch('http://localhost:8080/login', { 
     method: 'POST', 
     mode:'cors', 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json' 
     }, 
     body: JSON.stringify({ 
      username: this.state.username, 
      password: this.state.password 
     }) 
    }); 

これはonSubmitと呼ばれています。私は私のPOST要求にいくつかのデータを送信しているので、私はそれらのヘッダーが必要と仮定しています。

今私のノードのjsのサーバーAPIで、私は次のハンドラを持っている...

var responseHeaders = { 
    "access-control-allow-origin": "*", 
    "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS", 
    "access-control-allow-headers": "content-type, accept", 
    "access-control-max-age": 10, 
    "Content-Type": "application/json" 
}; 

app.post('/login', function(req, res, next) { 
    if (req.method == "OPTIONS") { 
     res.writeHead(statusCode, responseHeaders); 
     res.end(); 
    } 
    console.log("hello"); 
    ... 

私は取得要求を行うとき、これは、しかし、動作しません...

OPTIONS /login 200 8.570 ms - 4 

の場合私はPOSTが動作するヘッダーを削除しますが、データ(ユーザー名、パスワード)は渡されません。

このオプションの問題を回避するにはどうすればよいですか?

+0

チェックはこのhttp://stackoverflow.com/q/7067966/3284355 – Molda

答えて

1

app.postがあるサーバーのコードにこれを追加します。 OPTIONSリクエストはそのメソッドにルーティングされません。あなたがそうのようなoptionsのための特定のハンドラを記述する必要が

app.options("*",function(req,res,next){ 
    res.header("Access-Control-Allow-Origin", req.get("Origin")||"*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    //other headers here 
    res.status(200).end(); 
}); 
+0

OKこれはオプション要求をキャッチしますが、POST要求がありますまだ読まれていないので、データを渡すためにはちょっと必要です。 – Bolboa

+0

コンソールを確認してください。エラーが表示されます。 –

+0

エラーは、上記のオプション要求が機能しているようです。しかし、OPTIONSハンドラの後に来る私のPOSTハンドラは動作しません – Bolboa

2

ブラウザはプリフライトオプション要求をサーバーに送信して、CORSがサーバーで有効になっているかどうかを確認します。サーバー側でCORSを有効にするには名前がPOST要求に対して、暗示するよう

app.use(function(req, res, next) { 
     res.header("Access-Control-Allow-Origin", "*"); 
     res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
     next(); 
    }); 
関連する問題