2017-09-04 5 views
0

私は非常に単純なのNode.jsサーバーを書いた:Node.js express:なぜクッキーを読むことができないのですか?

var express = require('express'); 
var cookieParser = require("cookie-parser"); 

var app = express(); 
app.use(cookieParser()); 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + "/hello.html"); 
}); 

app.get('/ajax', function(req, res) { 
    console.log('ajax request received'); 
    console.log(req.cookies["username"]) 
}) 
app.listen(3000); 

と非常にシンプルなクライアント側のhtmlファイル:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
</head> 
<body> 
    <h1> Hello World </h1> 
    <script 
      src="https://code.jquery.com/jquery-3.2.1.min.js" 
      integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" 
      crossorigin="anonymous"></script> 
    <script> 
     document.cookie = "username=John Doe"; 
     $.ajax({ 
      url: "http://127.0.0.1:3000/ajax", 
     }).done(function() { 
      alert('AJAX sent'); 
     }); 
    </script> 
</body> 
</html> 

あなたが理解できるように、サーバが実行され、エンドユーザーが送信した後localhost:3000へのリクエストを取得すると、ファイル 'hello.html'がクライアントに提供されます。ブラウザはcookie "username = John Doe"を保存し、AJAX要求をエンドポイントlocalhost:3000/ajaxに送信します。私の意図は、サーバー内のクッキーの内容を読み取ることです(クッキーはクライアントから自動的に送信されます)。しかし、req.cookies ["username"]は未定義を返します。

あなたはその理由を知っていますか?

+2

あなたはあなたのクッキーが有効であるべき場所のためのパスを指定していないので、単純にパス '/ ajax'には適用できないかもしれません。あなたのブラウザのdevツールを使って、クッキーのパスを確認してください。 – CBroe

答えて

1

問題は、localhost:3000にGETリクエストを送信し、その結果、クッキーがドメインhttp://localhostに保存されることです。しかし、127.0.0.1へのAJAX呼び出しを送信すると、ブラウザが127.0.0.1とlocalhostを異なるドメインとして扱うため、Cookieは送信されません。したがって、ブラウザを127.0.0.1:3000(localhost:3000ではなく)で開くと、それを解決できます。

関連する問題