it-swarm.com.de

Wie setze ich Cookies in Node Js mit Express Framework?

In meiner Anwendung muss ich ein Cookie mithilfe des Express-Frameworks setzen. Ich habe den folgenden Code ausprobiert, aber das Cookie wird nicht gesetzt.

Kann mir jemand dabei helfen?

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

Die Reihenfolge, in der Sie Middleware in Express verwenden, ist von Bedeutung: Früher deklarierte Middleware wird zuerst aufgerufen. Wenn eine Anforderung verarbeitet werden kann, wird eine später deklarierte Middleware nicht aufgerufen.

Wenn express.static Die Anfrage bearbeitet, müssen Sie Ihre Middleware nach oben verschieben:

// 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'));

Außerdem muss die Middleware entweder eine Anforderung beenden (indem sie eine Antwort zurücksendet) oder die Anforderung an die nächste Middleware weiterleiten. In diesem Fall habe ich letzteres getan, indem ich next() aufgerufen habe, wenn das Cookie gesetzt wurde.

179
robertklep

Cookie setzen?

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

Cookie lesen?

req.cookies

Demo

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

Nicht genau die Antwort auf Ihre Frage, aber ich fand Ihre Frage auf der Suche nach einer Antwort auf mein Problem. Also poste ich es hier, vielleicht hilft es jemandem.

Mein Problem war, dass Cookies in der Serverantwort gesetzt, aber nicht vom Browser gespeichert wurden. Die Serverantwort kam mit gesetzten Cookies zurück:

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

Der Cookie wurde jedoch nie von einem Browser gespeichert.

So habe ich es gelöst.

Ich benutze fetch in einem clientseitigen Code. Wenn Sie in den fetch -Optionen nicht credentials: 'include' Angeben, werden Cookies weder an den Server gesendet noch von einem Browser gespeichert, obwohl die Serverantwort Cookies setzt.

Beispiel:

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'
    })
})

Hoffe es hilft jemandem.

23
Green

Cookie setzen:

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

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


Ein Cookie lesen:
(mit Cookie-Parser Middleware)

req.cookies['cookie']

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

14
spencer.sm