我的目标是将对象保存到req.user数据库。因此,情况是,每当socket.io收到某些内容时,它将保存到req.user数据库。
这是代码。
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);
});
});
});
});
但是我收到了这个错误,
Missing error handler on `socket`.
ReferenceError: req is not defined
答案 0 :(得分:-1)
每个Socket.IO连接都注入了request
属性,但它是进行握手的属性。您可以使用它:
socket.on('notify', function(msg) {
User.findById(socket.request...
但请注意以下几点:
您的用户必须在握手发生时进行身份验证。
如果会话和内容中发生任何事情,它们将不会被更新,因为请求只是被注入而且它不会改变它的状态。如果你使用单个页面应用程序只有一个请求,并且那里有套接字 - 它应该没问题,但如果你使用多个页面,这将是一个巨大的风险。
这件事对你有用,但你应该小心使用它:)