繁体   English   中英

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

[英]NodeJS + Express: share session across multiple routes

我有一个带有某些路由的Express 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;

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

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

尝试更改app.js中声明路由和会话的顺序。 另外,在使用会话之前需要使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM