Как правильно получить доступ к сессионному cookie в маршруте - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь сохранить значение в моем экспресс-приложении, используя cookie-сессию.Я хотел бы получить доступ к этому значению в любом из моих маршрутов.Я прекрасно могу это сделать в моем файле index.js.

var app = express();
app.set("trust proxy", 1);
app.use(
  cookieSession({
    name: "session",
    secret: "key",
    httpOnly: true,
    maxAge: 30 * 60 * 1000,
    secure: false,
    overwrite: false
  })
);


app.get("/", function(req, res, next) {
  // Update views
  req.session.views = (req.session.views || 0) + 1;
  req.session.key = "some key I set"
  // print out 3 views key = some key I set
  res.end(req.session.views + " views " + "key = " + req.session.key);
});

Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь установить или получить что-либо в моем сеансе на одном из моих маршрутов, я получаю сообщение об ошибке

Невозможно установить свойство 'key' из неопределенного

Это мой файл testRoute

module.exports = app => {
  app.get("/test",(req, res) => {
    // throws error
    res.end(req.session.key);
  });
};

Ant. Вот как я сообщаю своему файлу index.js знатьоб этом.

var app = express();
// Tell Index about my route
require("./routes/authRoutes")(app);

app.set("trust proxy", 1);
app.use(
  cookieSession({
    name: "session",
    secret: "key",
    httpOnly: true,
    maxAge: 30 * 60 * 1000,
    secure: false,
    overwrite: false
  })
);

Я очень новичок, чтобы выразить и концепции, связанные с промежуточным программным обеспечением и маршрутами.

Как правильно предоставить доступ к сеансу cookie на всех моих маршрутах.

1 Ответ

0 голосов
/ 01 июня 2018

Я подозреваю, что проблема в том, что вы require выбираете свой маршрут до того, как настроите сеанс:

var app = express();
require("./routes/testRoute")(app);
app.set("trust proxy", 1);

//you haven't told your app about the session
require("./routes/testRoute")(app);

///until now....
app.use(
  cookieSession({
    name: "session",
    secret: "key",
    httpOnly: true,
    maxAge: 30 * 60 * 1000,
    secure: false,
    overwrite: false
  })
);

Попробуйте это

var app = express();
require("./routes/testRoute")(app);
app.set("trust proxy", 1);

app.use(
  cookieSession({
    name: "session",
    secret: "key",
    httpOnly: true,
    maxAge: 30 * 60 * 1000,
    secure: false,
    overwrite: false
  })
);

//require route after session has been set up
require("./routes/testRoute")(app); 

Как сторона,Router может быть лучше использовать, чем require 'на ваших маршрутах.
Полная информация здесь: https://expressjs.com/en/4x/api.html#router

...