SocketIO ไม่สามารถส่งข้อมูลการปล่อยจากไคลเอนต์ได้

ฉันมีปัญหาแปลกที่สุดในการพยายามส่งข้อมูลจากเบราว์เซอร์ไคลเอนต์ไปยังเซิร์ฟเวอร์โหนดของฉันโดยใช้ SocketIO การส่งจากเซิร์ฟเวอร์ไปยังไคลเอนต์ทำงานได้ดี แต่ในทางกลับกัน ฉันได้รับข้อผิดพลาดที่ไม่ได้กำหนดไว้ ต่อไปนี้เป็นลักษณะคร่าวๆ ที่เรียบง่ายสุด ๆ

เซิร์ฟเวอร์โหนด (app.js)

io.on("connection", function(socket) {
  socket.on("pageReady", function(data) {
    console.log('pageReady called');
    console.log(data);
    return socket.emit('newline', '###SOCKET STARTED###');
  });
 socket.on("disconnect", function() {
    return console.log('disconnected');
  });
});

เบราว์เซอร์ (client.js)

var socket;

socket = io.connect("http://localhost:5678");

socket.on("newline", function(data) {
  return $('#socketData').append('<li>' + data + '</li>');
});

socket.emit("pageReady", "test");

ง่ายมากใช่มั้ย? ไม่มีอะไรพิเศษ. เมื่อฉันออกจากเซิร์ฟเวอร์ ก็ทำงานได้ดี แต่เมื่อไคลเอนต์เรียก "pageReady" โหนดตอบสนองด้วยสิ่งนี้

/Volumes/HOME/Users/user/git/sockettest/app.js:89
    console.log(data);
                ^
ReferenceError: data is not defined

ข้อมูลควรส่งคืน "ทดสอบ" แต่ไม่ใช่ ผมทำอะไรผิดหรือเปล่า?


person Dustin    schedule 09.12.2014    source แหล่งที่มา
comment
คุณแน่ใจหรือว่าเป็นรหัส?   -  person dandavis    schedule 09.12.2014
comment
ในโค้ดที่แสดง ไม่มีทางที่ data จะสามารถยกเลิกการกำหนดได้ทุกที่ที่มีการใช้งาน อาจ===ไม่ได้กำหนด แต่จะทราบชื่อ ข้อมูล และดังนั้นจึงไม่ใช่ข้อผิดพลาดในการอ้างอิง เนื่องจากคุณไม่ได้ทำอะไรกับข้อมูล จึงควรจะใช้ได้แม้ว่าจะไม่ได้กำหนดมูลค่าไว้ก็ตาม มันต้องมีอย่างอื่นที่ไม่แสดง...   -  person dandavis    schedule 09.12.2014


คำตอบ (1)


ไคลเอนต์ของคุณควรรับฟังการเชื่อมต่อซ็อกเก็ตก่อนที่จะพยายามส่งสัญญาณ:

var socket = io.connect("http://localhost:5678");

socket.on("newline", function(data) {
  return $('#socketData').append('<li>' + data + '</li>');
});

socket.on("connect", function() {
  socket.emit("pageReady", "test");
});
person cybersam    schedule 09.12.2014
comment
@Victor ไม่มันไม่ใช่ ดูสายลูกค้ารายสุดท้ายของเขาให้ละเอียดยิ่งขึ้น - person cybersam; 08.03.2017