В моем приложении мне нужно установить cookie с помощью экспресс-фреймворка. Я пробовал следующий код, но он не устанавливает cookie.
Может ли кто-нибудь помочь мне сделать это?
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);
Ответы:
Порядок, в котором вы используете промежуточное программное обеспечение в Express, имеет значение: промежуточное программное обеспечение, объявленное ранее, будет вызываться первым, и если оно сможет обработать запрос, любое промежуточное программное обеспечение, объявленное позже, не будет вызвано.
Если
express.static
обрабатывает запрос, вам нужно переместить ваше промежуточное ПО вверх:Кроме того, промежуточное ПО должно либо завершить запрос (отправив ответ), либо передать запрос следующему промежуточному ПО. В этом случае я сделал последнее, позвонив,
next()
когда cookie был установлен.Обновить
На данный момент парсер cookie представляет собой отдельный пакет npm, поэтому вместо использования
вам нужно установить его отдельно,
npm i cookie-parser
а затем использовать как:источник
express.static
, что будет обрабатывать их после вашего промежуточного программного обеспечения. Таким образом, для каждого файла JS или CSS будет вызываться код.демонстрация
источник
Не совсем отвечаю на ваш вопрос, но я наткнулся на ваш вопрос, ища ответ на вопрос, который у меня был. Может быть, это поможет кому-то еще.
Моя проблема заключалась в том, что файлы cookie были установлены в ответе сервера, но не были сохранены браузером.
Ответ сервера вернулся с набором файлов cookie:
Вот как я это решил.
Я использовал
fetch
в коде на стороне клиента. Если вы не укажетеcredentials: 'include'
вfetch
опции, печенье не отправляется на сервер и не сохраняется в браузере, даже несмотря на то наборы ответа сервера печенье.Пример:
Надеюсь, это кому-нибудь поможет.
источник
Установить печенье:
https://expressjs.com/en/4x/api.html#res.cookie
Чтение куки:
(с использованием промежуточного программного обеспечения cookie-парсера )
https://expressjs.com/en/4x/api.html#req.cookies
источник