req.session не определен nodeJS - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь установить сеанс в NodeJS и использовать его в моем / auth маршруте после этого, но у меня возникают неопределенные проблемы с сеансом.

В app.js:

const express = require('express'),
  path = require('path'),
  bodyParser = require('body-parser'),
  cors = require('cors'),
  mongoose = require('mongoose'),
  config = require('./config/DB');

const app = express();
  const session = require('express-session')
  const MongoStore = require('connect-mongo')(session);

mongoose.connect(config.DB, { useNewUrlParser: true }).then(
  () => { console.log('Database is connected') },
  err => { console.log('Can not connect to the database' + err) },
  options
);
const db = mongoose.connection


const adUnitRoutes = require('./routes/adunit.route');
const userProfileRoutes = require('./routes/userprofile.route');


app.use('/adunits', adUnitRoutes);
app.use('/userprofile', userProfileRoutes);

app.use(session({
  secret: 'my-secret',
  resave: false,
  saveUninitialized: true,
  store: new MongoStore({ mongooseConnection: db })
}));

В маршруте:

userProfileRoutes.route('/authentification').post((req, res) => {

  console.log('req session : ' + req.session.userId);
//here I got cant read property of userId because session is undefined

});

1 Ответ

0 голосов
/ 09 ноября 2018

Это происходит потому, что вы устанавливаете маршруты перед добавлением промежуточного программного обеспечения. Ваши обработчики по сути являются промежуточным программным обеспечением, поэтому, если они добавлены до session, ваш сеанс еще не обработан и не добавлен в запрос.

Добавление маршрутов после установки промежуточного программного обеспечения сделает его работу ожидаемой.

См. Этот свернутый пример:

const express = require('express');
const app = express();
const session = require('express-session');

app.get('/broken', (req, res) => {
  console.log('req session : ' + req.session.userId);
  res.write(String(req.session.userId));
  req.session.userId = 1;
  res.end();
});

app.use(
  session({
    secret: 'my-secret',
    resave: false,
    saveUninitialized: true
  })
);

app.get('/ok', (req, res) => {
  console.log('req session : ' + req.session.userId);
  res.write(String(req.session.userId));
  req.session.userId = 1;
  res.end();
});

app.listen(8089);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...