【发布时间】:2021-07-24 12:19:41
【问题描述】:
我使用 express 将一个 js 文件路由到主 js 文件,它是路由器中间件。此外,每个路径都由会话进行中间件。身份验证后,只有在 req.session.loggedIn 存在时才会收到的 get 请求,将在登录后的每个请求上执行。
但是对于 put 请求,它会执行一次,然后会被身份验证器阻止,身份验证器是两个请求中的中间件。
当注释掉 fs.writeFile 块时,cookie 仍然如预期的那样,并且 put 请求被执行了多次。
fs.writeFile 会弄乱 cookie 吗?
这是有问题的块:
fs.writeFile('./data/tasks.json', stringed, (err)=>{
if(err){return console.log(err)}
console.log('req.session from tasks put:',req.session)
}, ()=>res.send(`Successfuly added task. `))
这是验证中间件:
const validator = (req, res, next)=>{
console.log('req.session in validator:',req.session)
if(!req.session.loggedIn){
return res.status(401).send('Please log in.')
}
next()}
这是会话中间件:
app.use(session({
secret: ';klmkljhjkhn;jk',
cookie: {
maxAge: 6000065456468476813541684864764561231,
httpOnly: true,
secure: false,
},
saveUninitialized: true,
resave: true,
}))
这是路由中间件:
app.use('/tasks', validator, require('./routes/tasks'))
【问题讨论】:
-
您能展示一下应用程序是如何组成的吗? fs.writeFile 到底在哪里使用,在哪条路线上使用?另外,为什么要向 fs.writeFile 传递 2 个回调?
-
github.com/OrenSayag/jb_28_hw 我认为额外的回调可能会解决问题
-
嘿,我已经发布了答案。我试图通过写一篇文章来详细说明这个话题,但它仍在进行中。如果有任何帮助,这里有一个粗略的草稿,您可能会觉得有用 - 抱歉,如果我现在无法将它弄得更好:github.com/rkaw92/articles/blob/master/sessions/Article.md
标签: node.js express session filesystems middleware