簡體   English   中英

req.session是未定義的nodeJS

[英]req.session is undefined nodeJS

我試圖在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

});

發生這種情況是因為您在添加中間件之前設置了路由。 您的處理程序實質上是中間件,因此,如果在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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM