Порядок, у якому ви використовуєте проміжне програмне забезпечення в 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.
Оновлення
На сьогодні аналізатор файлів cookie є окремим пакетом npm, тож замість цього використовувати
app.use(express.cookieParser());
вам потрібно встановити його окремо, npm i cookie-parser
а потім використовувати його як:
const cookieParser = require('cookie-parser');
app.use(cookieParser());