Conectando a base de datos con socket.io y node.js

publicado por: Anonymous

¿Esta es la forma correcta de conectarme a una base de datos?, si bien me funcionó… muchas veces me encuentro con respuestas: “esta forma es obsoleta”, y mi pregunta es esa, esta es una buena forma de conectarse a una bd y de realizar consultas? (o la única), me pareció muy sencillo y rápido quisiera saber si es la manera correcta solamente.

Este es mi archivo del servidor donde realizo consultas y recibo las peticiones del cliente:

var app = require('express')();
var express = require('express');
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.use(express.static('./public'));
var users = [];
var nicks = new Array();
var mysql = require("mysql");


app.get('/', function(req, res) {
    res.sendFile(__dirname + '/index.html');
});


var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "",
    database: "prueba"
});



con.connect(function(err) {
    if (err) {
        console.log('Error connecting to Db');
        return;
    }
    console.log('Connection established');
});


con.query(
    'SELECT * FROM canales',
    function(err, rows) {
        if (err) throw err;
        console.log(rows);
    }
);



io.sockets.on('connection', function(socket) {

socket.on('room', function(room) {

    socket.join(room);

});


});


});



http.listen(3000, function() {
    console.log('listening on *:3000');
});

solución

Lo que haces es completamente válido. Por ejemplo, un chat en Node.js con Socket.io debe conectarse a la base datos al correr la aplicación para que guarde los mensajes. Otra opción mucho mejor sería tener una API para manejar acciones sobre el chat. Aún así, lo que haces es válido y no entiendo el por qué “obsoleto”; yo usaría las palabras “poco recomendado” en su lugar.

Hay un concepto llamado “Separación de intereses” que, básicamente nos anima a separar concientemente una aplicación en partes distintas, cada una con su funcionamiento propio. Esto tiene mucho que ver con el “Principio de responsabilidad única” (SRP) que, aunque está pensada para el término “clases”, se puede usar para un módulo, etc. y que, nos dice que una determinada clase, módulo o afines, debe tener una sola responsabilidad. De esta manera, tenemos un bajo acoplamiento en nuestra aplicación, incrementando así enormemente la calidad de nuestro software en distintos aspectos: arquitectura, diseño y aspectos post desarrollo (mantenimiento, escalabilidad).

Tu aplicación debería tener una API que se encargue de las acciones sobre el chat. Esta API debería ser privada y accederse a ella mediante un método de autenticación; yo te recomiendo JWT.

io.on('message', ({ author, room, message, token }) => {
  fetch ('/michat/v1/message/new', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${token}`
    }
  })
  .then((res) => {
    if (res.ok) {
      // hacer un broadcast a los usuarios de dicha sala
    } else {
      // mandar un mensaje de error de credenciales
    }
  });
});
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *