With Express I have the following setup:
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!"); });
So when I visit / the cookie is set as appropriate, but on every visit after that it keeps getting set. Later when I run console.log(req.headers) 
 through a new middleware it displays the following on every visit to /, even though the cookie should've been set:

The response headers have the cookie in them:

Am I doing something wrong here? I can't figure out what's wrong... Isn't cookie-parser meant to populate req.cookies with cookies from the req.headers.cookie property? Why is req.headers.cookie returning empty. req.headers.cookiealso returns empty if I comment out anything to do with cookie-parser.
Doesnt seem to anything wrong with your code. Your code below (edited to remove view engine details) works. For reference its using the following npm package versions:
"dependencies": {
    "body-parser": "^1.17.2",
    "cookie-parser": "^1.4.3",
    "express": "^4.15.3"
  } 
Added an additional middleware (exampleMiddleWare) to highlight the cookie check on route. 
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!");
});
If you can not get the above working then maybe sanity check within a different browser as your cookie settings can be overwritten or changed with browser options and plugins.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With