Экспресс-сеанс не удалось сохранить сеанс - PullRequest
0 голосов
/ 01 мая 2018

Я допустил хитрую проблему. В веб-приложении Nodejs express Express-сеанс middle не может сохранять объект типа reference в нескольких сеансах, пока он работает для * 1005. * примитив значение типа.

Скажем, у меня есть следующий блок кода: cachedFunc (ссылочный тип) всегда не определен между сеансами, но cachedText (примитивный тип) содержит значение.

Я даже пытался глубоко скопировать cacheFun , который до сих пор не может быть сохранен

Спасибо за помощь!

const _ = require("lodash");
const express = require("express");
const sessionMiddleWare = require("express-session");
const app = express();

app.use(
  sessionMiddleWare({
    name: "dzbSessionId",
    secret: "keyboard cat",
    cookie: { maxAge: 66660000 },
    resave: false,
    saveUninitialized: true
  })
);


app.get("/exam",  (req, res, next) => {
  console.info(req.session.cachedText);/*Primitive Types can be persistent */
  if (!req.session.cachedFunc/*always undefined here for referenced value*/) {
    try {
      req.session.cachedFunc = function(){};
      /*even the copied one still can't work*/
      //req.session.cachedFunc = _.cloneDeep(function(){});
      req.session.cachedText += "freeText";
    } catch (e) {}
  }
  }

1 Ответ

0 голосов
/ 05 мая 2018

Эта проблема устранена из-за того, что функция не является допустимой частью спецификации JSON, поэтому JSON.parse & JSON.stringify будет обрабатывать ее.

...