NodeJS + Express:跨多个路由共享会话

NodeJS + Express: share session across multiple routes

我有一个带有一些路由的 Express Web 应用程序。当 Web 应用程序与用户交互时,路由需要共享会话。路由在 app.js.

的单独 js 文件中声明

在我的app.js

var createError = require('http-errors');
var express = require('express');
var parseurl = require('parseurl')
var session = require('express-session')
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var p_conf = require('./parse_config');

// Declare routes here
var indexRouter = require('./routes/index');    // index route
var usersRouter = require('./routes/users');    // user route
var itemRouter = require('./routes/items');     // item route

var app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// set up express-session
var sessionMiddleware = session({
  secret: 'keyboard cat',
  resave: true,
  saveUninitialized: true
});

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/items', itemRouter);

// Assign an object to the session
app.use(function (req, res, next) {
  req.session.test = "test";
  next();
});

module.exports = app;

在我的 item.js 项目路线中:

const path = require('path');
const express = require('express');
const fetch = require('node-fetch');
const router = express.Router();

const p_conf = require('../parse_config');
const db_item = require('../db/db_item');

/* GET route root page. */
router.get('/', function(req, res, next) {
    // Get the object in the session
    console.log(req.session.test);

    db_item.getItems()
    .then(function(result) {
        if (typeof result === "object")
            return res.send(result["results"]);
        else
            return res.send(JSON.stringify({ "Error": String(result) }));       
    })
    .catch((err) => {
        return next(err);
    })
});

module.exports = router;

在 app.js 中,会话在网络应用程序初始化时创建并分配有测试对象。项目路由应该获得相同的会话并检索测试对象。但是,当访问路由根时,req.session.test总是undefined

项目和用户路由如何访问会话并共享会话范围内的对象?

尝试更改 app.js 中声明路由和会话的顺序。另外,在使用session之前需要先使用sessionMiddlwareapp.use)。

var sessionMiddleware = session({
  secret: 'keyboard cat',
  resave: true,
  saveUninitialized: true
});

app.use(sessionMiddleware);
app.use(function (req, res, next) {
  req.session.test = "test";
  next();
});

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/items', itemRouter);