Mes journaux App Engine le montrent.

Attention: connection.session () MemoryStore n'est pas

conçu pour un environnement de production, car il fuit

mémoire et ne dépassera pas un seul processus.

Maintenant, mon application nodejs ne peut pas utiliser la session. Comment résoudre ce problème?

1
Samith Basnayaka 24 nov. 2017 à 10:39

3 réponses

Meilleure réponse

En supposant que vous faites référence à l'authentification des utilisateurs, notez la partie suivante du code du Documentation AppEngine Node et exemple:

// In production use the App Engine Memcache instance to store session data,
// otherwise fallback to the default MemoryStore in development.
if (config.get('NODE_ENV') === 'production' && config.get('MEMCACHE_URL')) {
  sessionConfig.store = new MemcachedStore({
    hosts: [config.get('MEMCACHE_URL')]
  });
}

La solution de secours MemoryStore par défaut est essentiellement là pour le développement; vous devez spécifier un stockage de session plus permanent / évolutif de votre choix pour une utilisation réelle.

2
Amber 24 nov. 2017 à 07:42

Je pense que vous utilisez PM2 ou que votre serveur exécute plusieurs threads, avec un mécanisme de stockage de session par défaut. Cela ne passera pas par une solution à un seul thread, ce que vous utilisez généralement en mode développement.

Par conséquent, pour conserver la session, vous devez la stocker quelque part. Par exemple, Redis.

const EXPRESS         = require('express');
const APP             = EXPRESS();
const EXPRESS_SESSION = require('express-session');
const REDIS_STORE     = require('connect-redis')(EXPRESS_SESSION);

APP.use(EXPRESS_SESSION({
  secret: 'YOUR_SECRET',
  saveUninitialized: false,
  resave: false,
  store: new REDIS_STORE({ //storing the session in redis
    host: 'localhost',
    port: 6379, //redis port, should be 6379 by default
    ttl: 300 //time-to-live, session will be destroyed if no activity in 5 mins
  })
}));

Source du code: Projet personnel

0
Mr. Alien 24 nov. 2017 à 07:48

L'utilisation d'un magasin de session a corrigé l'erreur.

Utilisez ce lien. https://github.com/expressjs/session#compatible-session-stores

Dans le README.md sous magasins de sessions compatibles il existe une liste de magasins de sessions compatibles pour expressjs.

0
Samith Basnayaka 26 nov. 2017 à 14:35
47468444