В моем приложении мне нужно установить куки файл, используя экспресс-фреймворк. Я пробовал следующий код, но не устанавливал 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);
Ответ 1
Порядок, в котором вы используете промежуточное программное обеспечение в Express: сначала будет вызвано промежуточное ПО, объявленное ранее, и если он сможет обрабатывать запрос, любое промежуточное ПО, объявленное позже, не будет вызвано.
Если express.static
обрабатывает запрос, вам нужно переместить ваше промежуточное ПО:
// need cookieParser middleware before we can do anything with cookies
app.use(express.cookieParser());
// set a cookie
app.use(function (req, res, next) {
// check if client sent cookie
var cookie = req.cookies.cookieName;
if (cookie === undefined)
{
// no: set a new cookie
var randomNumber=Math.random().toString();
randomNumber=randomNumber.substring(2,randomNumber.length);
res.cookie('cookieName',randomNumber, { maxAge: 900000, httpOnly: true });
console.log('cookie created successfully');
}
else
{
// yes, cookie was already present
console.log('cookie exists', cookie);
}
next(); // <-- important!
});
// let static middleware do its job
app.use(express.static(__dirname + '/public'));
Кроме того, промежуточное программное обеспечение должно либо завершить запрос (путем отправки ответа), либо передать запрос следующему промежуточному программному обеспечению. В этом случае я сделал последний, вызвав next()
, когда cookie был установлен.
Ответ 2
Установить Cookie?
res.cookie('cookieName', 'cookieValue')
Чтение Cookie?
req.cookies
Demo
const express('express')
, cookieParser = require('cookie-parser'); // in order to read cookie sent from client
app.get('/', (req,res)=>{
// read cookies
console.log(req.cookies)
let options = {
maxAge: 1000 * 60 * 15, // would expire after 15 minutes
httpOnly: true, // The cookie only accessible by the web server
signed: true // Indicates if the cookie should be signed
}
// Set cookie
res.cookie('cookieName', 'cookieValue', options) // options is optional
res.send('')
})
Ответ 3
Не совсем ответьте на вопрос, но я нашел ваш вопрос в поиске ответа на мою проблему. Поэтому я публикую его здесь, возможно, это поможет кому-то.
Моя проблема заключалась в том, что файлы cookie были установлены в ответе сервера, но не были сохранены браузером. Ответ сервера вернулся с установленными cookie:
Set-Cookie:my_cookie=HelloWorld; Path=/; Expires=Wed, 15 Mar 2017 15:59:59 GMT
Но cookie никогда не сохранялся в браузере.
Вот как я это решил.
Я использую fetch
в клиентском коде. Если вы не укажете опцию credentials: 'include'
in fetch
, файлы cookie не отправляются на сервер и не сохраняются браузером, хотя ответ сервера устанавливает файлы cookie.
Пример:
var headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
return fetch('/your/server_endpoint', {
method: 'POST',
mode: 'same-origin',
redirect: 'follow',
credentials: 'include', // Don't forget to specify this if you need cookies
headers: headers,
body: JSON.stringify({
first_name: 'John',
last_name: 'Doe'
})
})
Надеюсь, это поможет кому-то.
Ответ 4
Установить файл cookie:
res.cookie('cookie', 'monster')
https://expressjs.com/en/4x/api.html#res.cookie
Прочитать файл cookie:
(используя cookie-parser промежуточное ПО)
req.cookies['cookie']
https://expressjs.com/en/4x/api.html#req.cookies