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);
Antworten:
Die Reihenfolge, in der Sie Middleware in Express verwenden: Die zuvor deklarierte Middleware wird zuerst aufgerufen, und wenn sie eine Anforderung verarbeiten kann, wird eine später deklarierte Middleware nicht aufgerufen.
Wenn
express.static
die Anfrage bearbeitet wird, müssen Sie Ihre Middleware nach oben verschieben: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 aufgerufen habe,
next()
wenn das Cookie gesetzt wurde.Aktualisieren
Ab sofort ist der Cookie-Parser ein separates npm-Paket, also anstatt zu verwenden
Sie müssen es separat installieren
npm i cookie-parser
und dann verwenden als:quelle
express.static
, die sie nach Ihrer Middleware behandeln. Für jede JS- oder CSS-Datei wird der Code aufgerufen.Demo
quelle
Ich habe Ihre Frage nicht genau beantwortet, aber ich bin auf Ihre Frage gestoßen, als ich nach einer Antwort auf ein Problem gesucht habe, das ich hatte. Vielleicht hilft es jemand anderem.
Mein Problem war, dass Cookies in der Serverantwort gesetzt wurden, aber nicht vom Browser gespeichert wurden.
Die Serverantwort kam mit gesetzten Cookies zurück:
So habe ich es gelöst.
Ich habe
fetch
im clientseitigen Code verwendet. Wenn Siecredentials: 'include'
in denfetch
Optionen nichts angeben , werden Cookies weder an den Server gesendet noch vom Browser gespeichert, obwohl die Serverantwort Cookies setzt.Beispiel:
Ich hoffe das hilft jemandem.
quelle
Setzen Sie einen Cookie:
https://expressjs.com/de/4x/api.html#res.cookie
Lesen Sie ein Cookie:
(mit Cookie-Parser- Middleware)
https://expressjs.com/de/4x/api.html#req.cookies
quelle