Я пишу бэкэнд для веб-сайта, используя node.js и машинопись. Недавно я провел сеансы, в которых храню пользовательские данные и язык, который они выбрали на сайте для будущего использования. Однако, когда пользователь перезагружает страницу или посещает другую часть моего веб-сайта, данные сеанса обновляются, я пытался изменить часть, где я инициализирую сеанс, и редактирую свою функцию, которая заполняет данные пользователя в сеансе. Проблема в том, что мой файл populateuserdata запускается постоянно, даже если пользовательские данные уже есть, и я не могу понять, почему он это делает.
const apiRouter = require("./routes/routes");
const session = require ("express-session");
const RedisStore = require("connect-redis")(session);
app.use(session({
store: new RedisStore(),
secret: "test",
cookie: { maxAge: 24 * 60 * 60 * 1000 }, // 1 day
resave: true,
autoreconnect: true,
saveUninitialized: true,
}));
app.use(morgan("dev"));
app.use(compression());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.set("port", 3000);
app.set("views", path.join(__dirname, "../views"));
app.set("view engine", "pug");
app.use(require("./services/populateUserData"));
app.get("/", homeController.index);
app.use("/", apiRouter);
app.use(expressValidator);
app.use(flash);
app.use(lusca.xframe("SAMEORIGIN"));
app.use(lusca.xssProtection);
И мой файл populateuserdata такой:
import { Request, Response, NextFunction } from "express";
const authService = require("./authService");
module.exports = (req: Request, res: Response, next: NextFunction) => {
if (!req.session.userData) {
req.session.userData = authService.getUserData(req.headers);
req.session.userData.uid = req.headers["shib-uid"];
req.session.userData.ip = req.headers["x-forwarded-for"] || (req.connection && req.connection.remoteAddress) || "";
next();
}
else {
next();
}
};
Итак, я подумал, что оператор if в файле populateuserdata не позволит сеансу переопределить пользовательские данные, когда данные уже есть, я что-то упустил?
Заранее большое спасибо!
/ V