/ / Jak przekazać obiekt req lub res do socket.io? - node.js, express, socket.io

Jak przekazać obiekt req lub res do socket.io? - node.js, express, socket.io

Moim celem jest zapisanie obiektu w bazie danych req.user. Tak więc scenariusz jest taki, że za każdym razem, gdy socket.io coś otrzyma, zapisze się w bazie danych req.user.

Oto kod.

io.on("connection", function(socket){
socket.on("notify", function(msg){
User.findById(req.user._id, function(err, found) {

found.notifications.push(msg);
found.save(function(err) {

io.emit("notify", msg);
});
});

});
});

Jednak otrzymałem ten błąd,

Missing error handler on `socket`.
ReferenceError: req is not defined

Odpowiedzi:

-1 dla odpowiedzi nr 1

Każde połączenie Socket.IO ma request Własność wstrzyknięto do niej, ale to ona wykonała uścisk dłoni. Możesz użyć tego jak:

socket.on("notify", function(msg) {
User.findById(socket.request...

Ale pamiętaj o kilku rzeczach:

Twój użytkownik musi być uwierzytelnionym do czasu, gdy nastąpi uścisk dłoni.

Jeśli coś się wydarzy podczas sesji i innych rzeczy,nie zostaną zaktualizowane, ponieważ prośba jest po prostu wprowadzana i nie zmienia jej stanu. Jeśli korzystasz z aplikacji pojedynczej strony z pojedynczym żądaniem i z gniazdami - powinno być dobrze, ale jeśli korzystasz z wielu stron, jest to ogromne ryzyko.

Tutaj jest to, co będzie działać dla Ciebie, ale powinieneś używać go ostrożnie :)

https://www.npmjs.com/package/express-socket.io-session