Экспресс-сессия на двух серверах

#javascript #node.js #express #session #express-session

Вопрос:

Я пытался использовать экспресс-сеанс на двух локальных серверах.

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

Вот код первого API

 require("dotenv").config();

const express = require('express');
const mysql = require("mysql");
const crypto = require("crypto");
const cors = require("cors");

const apiApp = express();

apiApp.use(express.json());
apiApp.use(cors());

const pool = mysql.createPool({
  user: process.env.DB_USER,
  password: process.env.DB_PASS,
  database: process.env.DB_NAME,
  host: "localhost"
});

var algorithm = 'aes256'; // algorithm
var key = 'password';

apiApp.post('/api/Connexion', (req, res) => {

  let cipheriv = crypto.createCipher(algorithm, key);  
  let encryptedPassword = cipheriv.update(req.body.motDePasse, 'utf8', 'hex')   cipheriv.final('hex');

  var data = [req.body.courriel, encryptedPassword];

  const query = "SELECT * FROM utilisateurs WHERE courriel=? AND motDePasse=?";
  pool.query(query, data, (error, results) => {
    if (results[0] amp;amp; !error) {
      res.send(true);
      req.session.courriel = req.body.courriel;
    } else {
      res.send(false);
    }
  });
});

module.exports = apiApp;
 

И второе

 require("dotenv").config();

const express = require('express');
const cors = require("cors");
const path = require("path");

const coreApp = express();

coreApp.use(express.json());
coreApp.use(cors());

let dir = path.resolve(__dirname, '..', '..')   '/'
coreApp.use(express.static(dir));

coreApp.get('/connexion', (req, res) => {
    if (req.session != undefined) {
        console.log(req.session.courriel);
    }
    res.sendFile(dir   "index.html");
});

coreApp.get('/application', (req, res) => {
    res.sendFile(dir   "application.html");
});

coreApp.get('/:a', (req, res) => {
    res.redirect("/");
});

module.exports = coreApp;
 

Итак, я пытаюсь установить переменную сеанса в строке 64 первого кода и использовать ее в строке 17 второго кода.

Как я могу это сделать ? Спасибо!

Комментарии:

1. Два сервера не обмениваются данными о сеансе. Простой ответ заключается в использовании одного сервера.

2. Вы можете обмениваться данными о сеансах между серверами, если в качестве хранилища сеансов используете общую базу данных, часто redis, но любая база данных может работать, если оба сервера обращаются к одной и той же базе данных для хранения экспресс-сеансов. Существуют поставщики хранения экспресс-сеансов для десятков баз данных.

Ответ №1:

Вы можете обмениваться данными сеанса между серверами, если вы используете общую базу данных в качестве хранилища сеансов для экспресс-сеанса, часто redis, но любая база данных может работать, если оба сервера обращаются к одной и той же базе данных для хранения экспресс-сеанса и экспресс-сеанс настроен правильно.

Существуют поставщики хранилища экспресс-сеансов для десятков баз данных, включая экспресс-сеанс mysql, который работает с базой данных, которую вы уже используете.