как передавать данные с сервера mysql на node.js socket.io

#javascript #mysql #node.js #socket.io #mysql-event

#javascript #mysql #node.js #socket.io #mysql-событие

Вопрос:

Итак, я уже некоторое время бьюсь головой о стену, я пытаюсь прослушивать события из пакета узлов @rodrigogs / my-sql events и передавать эти события через socket-io клиенту react.

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

 const con = mysql.createConnection({
  host     : 'not local host',
  user     : 'user',
  password : 'pw',
  database : 'dbname',
  port:mysqlport
});
const myInstance = new MySQLEvents(con, {});
myInstance.start()
  .then(() => console.log('I'm running!'))
  .catch(err => console.error('Something bad happened', err));

  myInstance.addTrigger({
    name: 'trigger1',
    expression: 'dbname.table',
    statement: MySQLEvents.STATEMENTS.ALL,
    onEvent: async (event) => {
      //socket socketio io .emit any variation of those doesn't work
        emitAnEvent(event);// current attempt      
      },

 

emitAnEvent действительно просто, но быть

 
function emitAnEvent(event){
   // socket is undefined, io nor socketio work.
  socketio.emit("rowUpdate",event.data)
}
 

Я пытаюсь отправить эту функцию idea, потому что, если я вложу любой из этих блоков друг в друга, произойдет ужасная печаль, я не уверен, как получить доступ к сокету вне области видимости io.on(‘conneciton’ …

 
io.on("connection", (socket) => {
    console.log("Client connected");
    
    socket.on("hydrateReq",()=>{
      console.log("hydrate request heard");
      socket.emit("hydrate", hydrateStore());
      })

    socket.emit("handshake","connected to backend");


});

 

и если я попытаюсь установить новое соединение каждый раз, когда происходит обновление… ну, вы можете догадаться, насколько хорошо это сработало.

итак…

как эти две вещи работают вместе? как вы отправляете mysql-события через socket.io ? и есть ли лучшая практика? или, очевидно, чистый способ справиться с этим, которого мне не хватает?

Я подтвердил, что mysql подключен, и socket-io подключается к обоим … и оба, похоже, работают просто отлично… Я просто совершенно не понимаю, как заставить их работать вместе.

 

 

Ответ №1:

Я слеп и не смог найти это нигде в доках, но вы можете получить доступ к emit через общий ввод-вывод с сервера… определяется как:

 const socketio = require('socket.io');

 const io = socketio(server, {   cors: {
      origin: "*",
      methods: ["GET", "POST"],
      credentials: true
    }});



function emitAnEvent(event){
  console.log(event);//io.emit is defined and the point I was looking for...
  io.emit("rowUpdate",event)
  
}