web-dev-qa-db-fra.com

Comment définir un cookie dans le noeud js en utilisant express framework?

Dans mon application, je dois définir un cookie à l'aide du framework express. J'ai essayé le code suivant, mais ce n'est pas le cookie.

Quelqu'un peut-il m'aider à le faire?

var express = require('express'), http = require('http');
var app = express();
app.configure(function(){
      app.use(express.cookieParser());
      app.use(express.static(__dirname + '/public'));

      app.use(function (req, res) {
           var randomNumber=Math.random().toString();
           randomNumber=randomNumber.substring(2,randomNumber.length);
           res.cookie('cokkieName',randomNumber, { maxAge: 900000, httpOnly: true })

           console.log('cookie have created successfully');
      });

});

var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(5555);
123
sachin

L'ordre dans lequel vous utilisez un middleware dans Express a de l'importance: le middleware déclaré plus tôt sera appelé en premier, et s'il peut traiter une demande, tout middleware déclaré plus tard ne sera pas appelé.

Si express.static traite la demande, vous devez déplacer votre middleware vers le haut:

// need cookieParser middleware before we can do anything with cookies
app.use(express.cookieParser());

// set a cookie
app.use(function (req, res, next) {
  // check if client sent cookie
  var cookie = req.cookies.cookieName;
  if (cookie === undefined)
  {
    // no: set a new cookie
    var randomNumber=Math.random().toString();
    randomNumber=randomNumber.substring(2,randomNumber.length);
    res.cookie('cookieName',randomNumber, { maxAge: 900000, httpOnly: true });
    console.log('cookie created successfully');
  } 
  else
  {
    // yes, cookie was already present 
    console.log('cookie exists', cookie);
  } 
  next(); // <-- important!
});

// let static middleware do its job
app.use(express.static(__dirname + '/public'));

En outre, le middleware doit soit mettre fin à une requête (en renvoyant une réponse) ou transmettre la requête au middleware suivant. Dans ce cas, j'ai fait le dernier en appelant next() lorsque le cookie a été défini.

179
robertklep

Set Cookie?

res.cookie('cookieName', 'cookieValue')

Lire Cookie?

req.cookies

démo

const express('express')
    , cookieParser = require('cookie-parser'); // in order to read cookie sent from client

app.get('/', (req,res)=>{

    // read cookies
    console.log(req.cookies) 

    let options = {
        maxAge: 1000 * 60 * 15, // would expire after 15 minutes
        httpOnly: true, // The cookie only accessible by the web server
        signed: true // Indicates if the cookie should be signed
    }

    // Set cookie
    res.cookie('cookieName', 'cookieValue', options) // options is optional
    res.send('')

})
84
Wayne Chiu

Pas exactement répondre à votre question, mais j'ai trouvé votre question à la recherche d'une réponse à mon problème. Alors je le poste ici, peut-être que ça aidera quelqu'un.

Mon problème était que les cookies étaient configurés dans la réponse du serveur, mais n'étaient pas enregistrés par le navigateur. La réponse du serveur est revenue avec les cookies définis:

Set-Cookie:my_cookie=HelloWorld; Path=/; Expires=Wed, 15 Mar 2017 15:59:59 GMT 

Mais le cookie n'a jamais été enregistré par un navigateur.

Voici comment je l'ai résolu.

J'utilise fetch dans un code côté client. Si vous ne spécifiez pas les options credentials: 'include' dans fetch, les cookies ne sont ni envoyés au serveur, ni enregistrés par un navigateur, bien que la réponse du serveur en définisse des.

Exemple:

var headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');

return fetch('/your/server_endpoint', {
    method: 'POST',
    mode: 'same-Origin',
    redirect: 'follow',
    credentials: 'include', // Don't forget to specify this if you need cookies
    headers: headers,
    body: JSON.stringify({
        first_name: 'John',
        last_name: 'Doe'
    })
})

J'espère que ça aide quelqu'un.

23
Green

Définir un cookie:

res.cookie('cookie', 'monster')

https://expressjs.com/en/4x/api.html#res.cookie


Lire un cookie:
(en utilisant cookie-analyseur middleware)

req.cookies['cookie']

https://expressjs.com/en/4x/api.html#req.cookies

14
spencer.sm