Я использую Node.js с Express и у меня есть код, похожий на этот, как часть моих маршрутов:
requireLogin: function(req, res, next) {
User.find(req.session.userId)
.on('success', function(user) {
req.addListener('data', function(chunk) {
console.log("DATA: " + chunk);
}
next()
}
}
Я использую Sequelize и метод User.find обращается к базе данных.Проблема в том, что событие запроса данных, с которым я связываюсь, никогда не запускается.Кажется, что событие данных уже было запущено и обработано к тому времени, когда пользователь возвращается из базы данных, и уже слишком поздно что-либо делать с ним.В приведенном выше примере я мог бы просто переместить req.addListener за пределы обратного вызова базы данных, но в действительности я вызываю функцию next (), которая не может быть перемещена.
Все следующее промежуточное ПО маршрута, которое вызываетсяby next () не имеет доступа к данным запроса, так как эти события уже были запущены.Хуже того, они просто зависают в ожидании события данных из req, потому что оно уже произошло.
Как я могу как-то задержать событие данных, чтобы его можно было связать из-за обратного вызова базы данных?Или я неправильно понял что-то фундаментальное и мне нужно изменить свой подход к этому вопросу?
Большое спасибо.
Редактировать: Я нашел соответствующее обсуждение в группе Google nodejs который предполагает, что нет решения, которое будет работать для меня.