2017-06-13 6 views
4

で、空である:私は/を訪問したときにReq.headers.cookieは、私は次のセットアップを持っていてもExpressでリクエストヘッダでクッキー

const express = requires("express"); 
const path = requires("path"); 
const bodyParser = requires("body-parser"); 
const cookieParser = requires("cookie-parser"); 

let server = express(); 
server.set("port", (process.env.PORT || 5000)); 
server.set("views", path.join(__dirname, "/views")); 
server.set("view engine", "ejs"); 
server.use(cookieParser()); 
server.use(express.static(self.workingDirectory + "/public")); 
server.use(bodyParser.json()); 
server.use(bodyParser.urlencoded({ extended: true })); 
server.use((req, res, next) => { 
    // if req.cookies exists and testcookie is undefined within req.cookies 
    if (req.cookies && typeof req.cookies["testcookie"] === "undefined") { 
     console.log("Setting cookie! Testcookie was not found"); 
     res.cookie("testcookie", "test", { 
      maxAge : ((((1000*60)*60)*24)*7), /* expire a week from today */ 
      httpOnly: true /* document.cookie doesn't return this cookie */ 
     }); 
    } 
    next(); 
}); 
server.get("/", (req, res) => { res.render("pages/index"); }); 
server.listen(server.get("port"),() => { console.log("Server started!"); }); 

だからクッキーは、適切な、しかし、その後、すべての訪問上に設定されていますそれは設定され続ける。

レスポンスヘッダ

がそれらにクッキーを持っている:私は新しいミドルウェアを通じてconsole.log(req.headers) を実行すると、後でそれは、クッキーが設定されたはずにもかかわらず、/へのすべての訪問で次のように表示され

ここで何か問題がありますか?何が間違っているのか分かりません... のプロパティのreq.cookiesにクッキーを設定するのは、cookie-parserではありませんか? req.headers.cookieが空に戻るのはなぜですか? は、cookie-parserと何かをコメントアウトすると空を返します。

+0

console.log(req.headers)に使用しているミドルウェアの残りのコードも貼り付けることができます –

+1

ブラウザの設定を確認することをお勧めします。クッキーは無効になっていると思います。うまく走った。 – ramasCoder

答えて

1

あなたのコードに何か問題があるようです。下の(ビューエンジンの詳細を削除するように編集された)コードは機能します。参考のためにその次には、NPMパッケージのバージョン使用して:

"dependencies": { 
    "body-parser": "^1.17.2", 
    "cookie-parser": "^1.4.3", 
    "express": "^4.15.3" 
    } 

をルート上のクッキーチェックを強調するために、追加のミドルウェア(exampleMiddleWare)を追加しました。

const express = require("express"); 
const path = require("path"); 
const bodyParser = require("body-parser"); 
const cookieParser = require("cookie-parser"); 

let server = express(); 

server.set("port", (process.env.PORT || 5000)); 

server.use(cookieParser()); 

server.use(bodyParser.json()); 
server.use(bodyParser.urlencoded({extended: true})); 

server.use((req, res, next) => { 
    // if req.cookies exists and testcookie is undefined within req.cookies 
    if (req.cookies && typeof req.cookies["testcookie"] === "undefined") { 
     console.log("Setting cookie! Testcookie was not found"); 
     res.cookie("testcookie", "test", { 
      maxAge: ((((1000 * 60) * 60) * 24) * 7), /* expire a week from today */ 
      httpOnly: true /* document.cookie doesn't return this cookie */ 
     }); 
    } 
    next(); 
}); 

const exampleMiddleWare = (req, res, next) => { 
    res.hasTestCookie = !!req.cookies.testcookie 
    next(); 
}; 

server.get("/", exampleMiddleWare, (req, res) => { 
    res.send(`<h1>Cookie Test</h1><h2>Cookie Found: ${res.hasTestCookie}</h2>`); 
}); 

server.listen(server.get("port"),() => { 
    console.log("Server started!"); 
}); 

クッキーの設定が上書きされたり、ブラウザのオプションやプラグインを変更することができるよう、あなたが別のブラウザ内で上記多分その後、作業の健全性チェックを取得できない場合。

0

私は上記のスニペットを試して、req.headers.cookieは空ではありません。私はreq.headerからクッキー値を受け取りました。

const express = require("express"); 
const path = require("path"); 
const bodyParser = require("body-parser"); 
const cookieParser = require("cookie-parser"); 

let server = express(); 
// server.set("port", (process.env.PORT || 5000)); 
// server.set("views", path.join(__dirname, "/views")); 
// server.set("view engine", "ejs"); 
server.use(cookieParser()); 
// server.use(express.static(self.workingDirectory + "/public")); 
server.use(bodyParser.json()); 
server.use(bodyParser.urlencoded({ extended: true })); 
server.use((req, res, next) => { 
    // if req.cookies exists and testcookie is undefined within req.cookies 
    if (req.cookies && typeof req.cookies["testcookie" ] === "undefined") { 
     console.log("Setting cookie! Testcookie was not found"); 
     res.cookie("testcookie", "test", { 
      maxAge : ((((1000*60)*60)*24)*7), /* expire a week from today */ 
      httpOnly: true /* document.cookie doesn't return this cookie */ 
     }); 
    } 
    next(); 
}); 
server.get("/", (req, res) => { console.log(req.headers); 
    res.send(`<h1> hello world </h1>`); }); 
server.listen(5000,() => { console.log("Server started!"); }); 
関連する問題