无法通过Socket.io传递MongoDB ObjectID至服务器,请求修复
问题修复方案
你遇到的问题由三个关键错误导致,以下是逐一修复步骤:
1. 客户端未获取input的实际值
你当前获取的是jQuery DOM对象而非input的value属性,需要添加.val()来提取ObjectID字符串:
// 原代码 var ObjectID = $('#ObjectID') // 修复后 var ObjectID = $('#ObjectID').val();
2. Socket事件名称不匹配
客户端发送的事件名为ObjectID,但服务器监听的是ObjectIO,需统一事件名称:
// 服务器端原代码 socket.on('ObjectIO',(ObjectID)=>{...}) // 修复后 socket.on('ObjectID',(ObjectID)=>{...})
3. 未等待Socket连接完成就发送数据
当前代码在文档就绪时立即发送数据,此时Socket可能尚未建立连接,需将发送逻辑放在connect事件回调内:
完整修复后的客户端代码
$(document).ready(function(){ var socket = io(); // connect client to server socket.on('connect', function(){ console.log('Connected to server'); // 连接建立后再发送ID var ObjectID = $('#ObjectID').val(); socket.emit('ObjectID', ObjectID); }); // disconnect from server socket.on('disconnect', function(){ console.log('Disconnected from server'); }); });
完整修复后的服务器端代码
// socket connection const server = http.createServer(app); const io = socketIO(server); io.on('connection',(socket)=>{ console.log('Connected to client'); // 修正事件名称为ObjectID socket.on('ObjectID',(ObjectID)=>{ console.log('User ID is: ', ObjectID); }); // listen to disconnection socket.on('disconnect',()=>{ console.log('Disconnected from Client'); }); });
完成以上修复后,重新启动服务器并登录,VS Code的Node.js控制台就能正常打印用户ObjectID了。
内容的提问来源于stack exchange,提问作者nik_kolev
相关产品推荐
相关产品推荐

