Keitaro Urashima
Keitaro Urashima

Reputation: 1001

How to get cookie value in expressjs

I'm using cookie-parser, all the tutorial talk about how to set cookie and the time it expiries but no where teach us how to get the value of these cookie

Upvotes: 72

Views: 166242

Answers (5)

Sean V. Baker
Sean V. Baker

Reputation: 1

I used the NPM cookie-parser middleware that used to come as part of Express:

npm install cookie-parser

Be careful when rolling your own cookie parsing instead of using the cookie-parser middleware module.

I had an = in one of my cookie values that remained encoded as a %3d value.

The cookie-parser module correctly decoded this for me.

Upvotes: 0

MkMan
MkMan

Reputation: 2191

For people that stumble across this question, this is how I did it:

You need to install the express cookie-parser middleware as it's no longer packaged with express.

npm install cookie-parser

Then set it up as such:

const cookieParser = require("cookie-parser");

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

Then you can access the cookies from

req.cookies

Hope that help.

Upvotes: 96

Jishan mondal
Jishan mondal

Reputation: 656

The following is how to get a request's cookies:

const app = require('express')();
app.use('/', (req, res) => {
    var cookie = getcookie(req);
    console.log(cookie);
});

function getcookie(req) {
    var cookie = req.headers.cookie;
    // user=someone; session=mySessionID
    return cookie.split('; ');
}

Output

['user=someone', 'session=mySessionID']

Upvotes: 51

repeatdomiau
repeatdomiau

Reputation: 891

Just want to add that we shouldn't be using modules to do trivial stuff. Modules are very convenient and fast forward development, but keep us from learning by creating infrastructural code.

I'm a professor not a boss so I value more programmers knowledge/skill development than to write code in lesser time without learning anything...

Back to business...

Unless you need signed cookies, or anything more complex, it's perfectly possible to write your own middleware to parse cookies and add the values to the rest of the pipeline as the module does.

app.use((req, res, next) => {
    const { headers: { cookie } } = req;
    if (cookie) {
        const values = cookie.split(';').reduce((res, item) => {
            const data = item.trim().split('=');
            return { ...res, [data[0]]: data[1] };
        }, {});
        res.locals.cookie = values;
    }
    else res.locals.cookie = {};
    next();
});

Anywhere you need to read the cookie it's available via res.locals.cookie, conveniently formatted as an object.

You could even add a custom cryptography strategy here to make sure no one is reading your cookie.

Just remember middlewares are ordered, so this one has to be added before any other middleware or route that uses the cookie.

Upvotes: 22

Shanil Fernando
Shanil Fernando

Reputation: 1322

First note that Cookies are sent to client with a server request and STORED ON THE CLIENT SIDE. Every time the user loads the website back, this cookie is sent with the request.

So you can access the cookie in client side (Eg. in your client side Java script) by using

document.cookie

you can test this in the client side by opening the console of the browser (F12) and type

console.log(document.cookie);

you can access the cookie from the server (in your case, expressjs) side by using

req.cookies

Best practice is to check in the client side whether it stored correctly. Keep in mind that not all the browsers are allowing to store cookies without user permission.

As per your comment, your code should be something like

var express = require('express');
var app = express();

var username ='username';

app.get('/', function(req, res){
   res.cookie('user', username, {maxAge: 10800}).send('cookie set');
});

app.listen(3000);

Upvotes: 43

Related Questions