W mojej aplikacji muszę ustawić plik cookie, korzystając z frameworka ekspresowego. Wypróbowałem następujący kod, ale nie ustawia on pliku cookie.
Czy ktoś może mi w tym pomóc?
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);
Odpowiedzi:
Kolejność, w jakiej używasz oprogramowania pośredniego w sprawach Express: oprogramowanie pośrednie zadeklarowane wcześniej zostanie wywołane jako pierwsze, a jeśli może obsłużyć żądanie, żadne oprogramowanie pośrednie zadeklarowane później nie zostanie wywołane.
Jeśli
express.static
obsługuje żądanie, musisz przenieść oprogramowanie pośredniczące w górę:Ponadto oprogramowanie pośredniczące musi albo zakończyć żądanie (przez odesłanie odpowiedzi), albo przekazać żądanie do następnego oprogramowania pośredniego. W tym przypadku zrobiłem to drugie, dzwoniąc,
next()
gdy plik cookie został ustawiony.Aktualizacja
Obecnie parser plików cookie jest osobnym pakietem npm, więc zamiast używać
musisz go zainstalować osobno używając,
npm i cookie-parser
a następnie używać go jako:źródło
express.static
, które będzie obsługiwać je po oprogramowaniu pośredniczącym. Tak więc dla każdego pliku JS lub CSS zostanie wywołany kod.Próbny
źródło
Nie do końca odpowiadając na twoje pytanie, ale natknąłem się na twoje pytanie, szukając odpowiedzi na problem, który miałem. Może pomoże to komuś innemu.
Mój problem polegał na tym, że pliki cookie zostały ustawione w odpowiedzi serwera, ale nie zostały zapisane przez przeglądarkę.
Odpowiedź serwera wróciła z ustawionymi plikami cookie:
Tak to rozwiązałem.
Użyłem
fetch
w kodzie po stronie klienta. Jeśli nie zaznaczyszcredentials: 'include'
wfetch
opcjach, pliki cookies nie są wysyłane na serwer ani zapisywane przez przeglądarkę, mimo że odpowiedź serwera ustawia pliki cookies.Przykład:
Mam nadzieję, że to komuś pomoże.
źródło
Ustaw plik cookie:
https://expressjs.com/en/4x/api.html#res.cookie
Odczytaj plik cookie:
(za pomocą oprogramowania pośredniczącego z parserem plików cookie )
https://expressjs.com/en/4x/api.html#req.cookies
źródło