socket.on не работает вне io.sockets.on ('соединение, ..) - PullRequest
0 голосов
/ 10 июля 2019

Я пытался поймать сообщение со страницы маршрутизации следующим образом:

СТРАНИЦА МАРШРУТА


router.get('/', function(req, res, next){
        var socket= req.app.get('socketio');
        socket.on('Ok', () => console.log("OK"));
        res.render('exercises', {title: 'Exercises', ex: values[0]});
    })

APP.JS

io.sockets.on('connection', function(socket){
    console.log('Connesso');
    app.set('socketio', socket);
})

Чтобы поймать событие 'Ok' от клиента на странице маршрутизации, но оно не работает, и я не понимаю, почему, потому что я передал сокет с app.set

РЕДАКТИРОВАТЬ Я отправляю событие здесь:

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect('http://localhost:8080/');
    </script>
    <div id="addex" hidden>
        <form name="newex" method="get">
            <h1>Inserisci esercizio</h1>
            <p>Nome</p>
            <input id="name" name="name" type="text"></input>
            <p>Descrizione</p>
            <input id="description" name="description" type="text"></input>
            <input type="submit"></input>
        </form>
    </div>
    <button id="add" type="button" onclick=""> Add </button>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
    <ul>
    <p>Excercises:</p>
     <% ex.forEach(value => { %>
     <li><%= value.name %></li>
    <% }); %>

    </ul>
    <script type="text/javascript">
        add.onclick = function(event){
            addex.hidden = false;
        }
        newex.onsubmit = function(event){
            event.preventDefault();
            socket.emit('message', {name: document.getElementById('name').value, desc: document.getElementById('description').value});

        }
    </script>
  </body>
</html>

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Попробуйте следовать этому примеру:

const socketServer = SocketService.io = socketIo(server, {
    path: process.env.WEBSOCKETS_PATH || "/socket.io",
    handlePreflightRequest: (req, res) => {
        const headers = {
            "Access-Control-Allow-Headers": "Content-Type, Authorization",
            "Access-Control-Allow-Origin": req.headers.origin ? req.headers.origin : "*", // or the specific origin you want to give access to,
            "Access-Control-Allow-Credentials": true,
        };
        res.writeHead(200, headers);
        res.end();
    },
});

export let socketConnection;

socketServer.on("connect", async (connection) => {
    logger.log("Successfully established socket connection.");
    connection.emit("connection", { code: 200, message: "Socket connection established." });
    socketConnection = connection;
    connection.on("my event", async (streamConnection) => {
        logger.log("Successfully established socket my event.");
        connection.emit("connection", { code: 200, message: "My event established, listening on 'my event' event." });
    });
});

Теперь в другой части кода вы можете импортировать 'socketConnection' и использовать его.

0 голосов
/ 10 июля 2019

.emit - это запуск события, а .on прослушивание события.

При этом в коде маршрутизатора, выполнив socket.on('Ok', () => console.log("OK"));, вы пытаетесь прослушать событие с именем * 1006.*.

Теперь, чтобы прослушать это событие, должно быть событие с именем Ok.В вашем клиенте, выполнив это socket.emit('message', ...), вы запускаете событие с именем message.

. В вашем данном коде я не вижу, нужно ли вам это сообщение или нет, но сводка состоит в том, чтобы прослушивать, и событие называетсяOk вы должны socket.emit('Ok', ...) где-то еще;ваш клиент в этом случае.

Это базовое значение socket.io.Я предлагаю вам проверить документацию и некоторые учебные пособия, потому что вначале меня это тоже сбивало с толку:)

Надеюсь, это поможет вам!

Приветствия!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...