#javascript #node.js #express
Вопрос:
у меня есть асинхронная функция, которая принимает токен на предъявителя, отправленный из headers.authorization, и возвращает текущую информацию о подключенном пользователе.
exports.me = async (req, res) => {
const accessToken = req.headers.authorization;
const bearer = accessToken.split(" ");
const bearerToken = bearer[1];
req.token = bearerToken;
// header take
jwt.verify(bearerToken, process.env.SECRET_KEY, function (err, decoded) {
if (decoded) {
const now = new Date();
User.findOne({ _id: decoded.id })
.select("firstName lastName email avatar birthday _id")
.then((user) => {
return res.status(200).json(user);
})
.catch((err) => {
return res.status(404).json(err);
});
}
});
};
вместо того, чтобы запрашивать req.params.Идентификатор пользователя спереди в следующей функции, я хочу получить идентификатор пользователя непосредственно из функции ‘me()‘
exports.getEvents = async (req, res) => {
const allEvents = await Events.find({ owner: req.params.userId })
.then((events) => {
return res.status(200).json(events);
})
.catch((err) => {
return res.status(404).json(err);
});
};
Ответ №1:
Проблема устранена путем установки идентификатора в теле запроса и передачи функции me в качестве промежуточного программного обеспечения
User.findOne({ _id: decoded.id })
.select("firstName lastName email avatar birthday _id")
.then((user) => {
req.body.userId = user._id
next();
})