[英]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
中声明路由和会话的顺序。 另外,在使用会话之前需要使用sessionMiddlware
( app.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.