express会话与mongo存储-请求会话.save()回调中已经发送了头



im使用与mongo存储的express会话。然而,在我的身份验证过程中,在用户成功通过身份验证后,我调用req.session.save((。但当我试图向客户端发送响应时,我得到了消息Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

当我在调用req.session.save((之前发送响应,而不是在回调中时,它就工作了。这就是我的代码片段的样子。

// res.json({ data: 'hello world' }); //This is working... 
req.session.save((err) => {
if (err) {
console.log('Error saving session: ', err);
} else {
// res.json({ data: 'Hello CB' }); //Headers already sent
}
});

我还可以看到会话保存在我的mongoDb中。我找不到告诉我的任何东西,req.session.save((正在向客户端发送一些响应。

为什么在req.session.save((的回调函数中已经发送了头?

更新了完整的请求功能:

const Create = async (req, res) => {
const { code } = req.body;
await Authenticate(code)
.then((user) => {
//Check if User already exists in database
UserModel.getUser(user.id)
.then((resDB) => {
if (resDB === null) {
console.log('User not found');
//User dont exists, create it
UserModel.createUser({
...
})
.then((is_saved) => {
if (is_saved) {
res.json(user);
res.end();
}
})
} else {
req.session.regenerate((err) => {
req.session.value = "somevalue";    
});
req.session.save((err) => {
if (err) {
console.log('Error saving session: ', err);
} else {
// res.json({ cookie: req.session });
res.json({ data: 'Hello from CB' });
res.end();
}
});

}
})
.catch((err) => {
console.log('User Create or Login error: ', err);
res.end();
})
})
.catch((err) => {
console.log('Authentication error', err);
res.end();
});
}

似乎缺少async and await。你能分享完整的方法代码吗?

const saveInSession =  async (req, res, next) => {
const getData = await req.body; //just an example
req.session.save((err) => {
if (err) {
console.log('Error saving session: ', err);
} else {
// res.json({ data: 'Hello CB' }); //Headers already sent
}
});
};

最新更新