[英]NodeJS + Express: share session across multiple routes
I have an Express web application with some routes. 我有一个带有某些路由的Express Web应用程序。 The routes need to share the session when the web app interacts with users.
当网络应用与用户交互时,路由需要共享会话。 The routes are declared in separate js files from the app.js.
路由是在与app.js分开的js文件中声明的。
In my app.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;
In my item.js
for the item route: 在我的
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;
In the app.js the session is created and assigned with a test object when the web app is initialised. 在初始化Web应用程序时,在app.js中创建会话并为其分配测试对象。 The item route is supposed to get the same session and retrieve the test object.
项目路由应该获得相同的会话并检索测试对象。 However,
req.session.test
is always undefined
when the route root is accessed. 但是,访问路由根时,
req.session.test
始终是undefined
的。
How can the item and user routes access the session and share the session scoped objects across? 项目和用户路由如何访问会话并共享会话范围的对象?
Try changing the order of declaring routes and session in app.js
. 尝试更改
app.js
中声明路由和会话的顺序。 Also, need to use sessionMiddlware
( app.use
) before using session. 另外,在使用会话之前需要使用
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.