Я использую Socket.IO для отправки данных с моего клиента на мой сервер node.js. Когда я получаю данные от клиента, я просто регистрирую их. Однако данные регистрируются два раза, а я ожидаю, что они войдут только один раз?
Вот код на стороне клиента
btn.addEventListener("click", (e) => {
socket.emit("comparison", "hello");
});
Вот код на стороне сервера
app.get("/", (req, res) => {
io.on("connection", (socket) => {
socket.on("comparison", (data) => {
console.info(data);
})
})
Это журналы 'Привет Привет'
Есть идеи, что это такое?
ОБНОВИТЬ
Я до сих пор не исправил проблему, хотя заметил, что когда я беру код сокета за пределами кода экспресс-маршрута, есть только один журнал
@karthick const btn = document.querySelector("#btn");
вам не нужно помещать io.on ("соединение") внутри app.get ("/").
Вы можете привести мне пример? Я проголосую



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы не должны помещать io.on ('connection') в app.get ('/'). Здесь вы регистрируете прослушиватель событий для каждого запроса на получение. Причина, по которой вы видите два оператора, напрямую связана с количеством запросов, обработанных внутри вашего app.get ().
Взгляните на пример, представленный на сайте socket.io https://socket.io/docs/#Using-with-Express
Я добавил сюда похожий шаблон кода,
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 8000;
var server = require('http').createServer(app);
var io = require('socket.io')(server);
app.use(express.static(__dirname + '/app'));
app.use(bodyParser.urlencoded({ extended: true }));
server.listen(port,() => {
console.info("server listening on"+port);
});
app.get('/', function(req, res){
//do something
});
io.on('connection',function(socket){
socket.on('comparison', function () {
});
});
какой селектор используется для btn?