javascript - 从另一个端点检索时,使用 express-session 保存到 req.session 的数据为空
问题描述
我正在实现快速会话的简单使用,并将当前登录的用户保存到会话中。当我将它记录到get
路由上的控制台时,会话具有currentUser
密钥,但该值只是一个空对象,如果我登录currentUser
保存会话的中间件req.session
具有正确的数据。看起来数据没有持久化,但我觉得奇怪的是它有键,但没有值。
我省略了与问题无关的部分代码。
// saveLoggedInUser middleware
const saveLoggedInUser = async (req, res, next) => {
const User = await req.body;
req.session.currentUser = User;
req.session.save();
console.log(req.session.currentUser); // Logs correct data
//const usersFromDB = await fetchUsersFromDB().catch((e) => {console.log(e)});
//findCommonUser(usersFromDB,User);
//app.set('Users', User);
next();
};
// GetUserInvoices
userInvoices.get('/fetchUserInvoices', async (req,res) => {
try {
const invoices = await InvoiceModel.find().catch((e) => {console.log(e)});
const user = req.session.currentUser;
console.log(user); // logs the empty object value.
} catch (error) {
console.log(error)
}
// server.js
app.use(express.json());
app.use(cors());
app.use(express.static(path.join(__dirname, 'build')));
app.use('/', cookieValidationMiddleware, StoreInvoiceRouter);
app.use(expressSession({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: {secure: false}
}));
app.use('/', saveLoggedInUserMiddleware, UserInvoicesRouter);
app.use('/', UpdateUserProfileRouter);
app.get('*', async (req,res) => {
res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
解决方案
问题在于saveLoggedInUser
它没有附加方法。下面是我使用的最终代码。
// server.js
app.use(
expressSession({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
})
);
app.use(express.json());
app.use(cors());
app.use(express.static(path.join(__dirname, 'build')));
app.use('/', cookieValidationMiddleware, StoreInvoiceRouter);
app.use('/', saveLoggedInUserMiddleware, UserInvoicesRouter);
app.use('/', UpdateUserProfileRouter);
app.get('*', async (req,res) => {
res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
//saveLoggedInUser Middleware
saveLoggedInUser.post('/saveUser', async (req,res,next) => {
const User = await req.body;
req.session.currentUser = User;
const usersFromDB = await fetchUsersFromDB().catch((e) => {console.log(e)});
findCommonUser(usersFromDB,User);
next();
})
// getUserInvoices
userInvoices.get('/fetchUserInvoices', async (req,res) => {
try {
const invoices = await InvoiceModel.find().catch((e) => {console.log(e)});
const user = req.session.currentUser;
console.log('USER',user);
const userInvoices = await app.get('userInvoices')
req.session.invoices = userInvoices
var currentInvoices = req.session.invoices;
res.json(currentInvoices);
} catch (error) {
console.log(error)
}
});
推荐阅读
- reactjs - 在 react-router 中放置嵌套路由的位置?
- java - InvalidKeySpecException:如何从 .der 文件中提取私钥?
- scale - 监控并提醒 prometheus 指标数量异常
- excel - 具有 3 个增值税和储蓄变量的 Excel 公式,停留在第三个变量上
- php - 如何在 PHP 回显输出中正确编写 HTML 标记
- java - android 应用程序中的 SQLite 函数
- android - 从 Source 构建领域并在 Android 项目中使用 AAR
- android - AdMob 的 RewardedVideoAd 会破坏观看视频后启动的活动
- c++ - “函数”不是 C++ 类型
- php - 当 url 包含点或冒号时,PHP curl 请求会导致白页