#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)
}