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 1Każ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