No meu aplicativo, preciso definir um cookie usando a estrutura expressa. Tentei o código a seguir, mas ele não está definindo o cookie.
Alguém pode me ajudar a fazer isso?
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);
Respostas:
A ordem na qual você usa o middleware no Express é importante: o middleware declarado anteriormente será chamado primeiro e, se puder lidar com uma solicitação, qualquer middleware declarado posteriormente não será chamado.
Se
express.static
estiver lidando com a solicitação, você precisará mover seu middleware para cima:Além disso, as necessidades de middleware para qualquer fim um pedido (enviando de volta uma resposta), ou passar a solicitação para a próxima middleware. Nesse caso, eu fiz o último chamando
next()
quando o cookie foi definido.Atualizar
A partir de agora o analisador de cookies é um pacote npm separado, portanto, em vez de usar
você precisa instalá-lo separadamente usando
npm i cookie-parser
e depois usá-lo como:fonte
express.static
, que os tratarão após o seu middleware. Portanto, para cada arquivo JS ou CSS, o código será chamado.Demo
fonte
Não estou respondendo exatamente à sua pergunta, mas me deparei com ela, enquanto procurava uma resposta para um problema que eu tinha. Talvez isso ajude outra pessoa.
Meu problema foi que os cookies foram definidos na resposta do servidor, mas não foram salvos pelo navegador.
A resposta do servidor voltou com os cookies configurados:
Foi assim que eu resolvi.
Eu usei
fetch
no código do lado do cliente. Se você não especificarcredentials: 'include'
nofetch
opções, os cookies não serão enviados ao servidor nem salvos pelo navegador, mesmo que a resposta do servidor defina cookies.Exemplo:
Espero que isso ajude alguém.
fonte
Defina um cookie:
https://expressjs.com/en/4x/api.html#res.cookie
Leia um cookie:
(usando o middleware do analisador de cookies )
https://expressjs.com/en/4x/api.html#req.cookies
fonte