Dans mon application, je dois définir un cookie en utilisant le framework express.J'ai essayé le code suivant mais il ne définit pas le cookie.
Quelqu'un peut-il m'aider à faire ça?
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);
Réponses:
L'ordre dans lequel vous utilisez le middleware dans Express est important: le middleware déclaré plus tôt sera appelé en premier, et s'il peut gérer une requête, tout middleware déclaré ultérieurement ne sera pas appelé.
Si
express.static
traite la demande, vous devez déplacer votre middleware:En outre, le middleware doit soit mettre fin à une requête (en renvoyant une réponse), soit transmettre la requête au middleware suivant. Dans ce cas, j'ai fait ce dernier en appelant
next()
lorsque le cookie a été défini.Mettre à jour
À partir de maintenant, l'analyseur de cookies est un package npm séparé, donc au lieu d'utiliser
vous devez l'installer séparément en utilisant
npm i cookie-parser
, puis l'utiliser comme:la source
express.static
, qui les traitera après votre middleware. Donc pour chaque fichier JS ou CSS, le code sera appelé.Démo
la source
Je ne réponds pas exactement à votre question, mais je suis tombé sur votre question en cherchant une réponse à un problème que j'avais. Peut-être que cela aidera quelqu'un d'autre.
Mon problème était que les cookies étaient définis 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:
Voilà comment je l'ai résolu.
J'ai utilisé
fetch
dans le code côté client. Si vous ne le spécifiez pascredentials: 'include'
dans lesfetch
options, les cookies ne sont ni envoyés au serveur ni enregistrés par le navigateur, même si la réponse du serveur définit des cookies.Exemple:
J'espère que cela aide quelqu'un.
la source
Définissez un cookie:
https://expressjs.com/en/4x/api.html#res.cookie
Lire un cookie:
(en utilisant un middleware cookie-parser )
https://expressjs.com/en/4x/api.html#req.cookies
la source