如何使用socket.io访问mysql数据库

6
我刚开始学习服务器端JavaScript编码,一直在阅读关于socket.io和node.js的教程,但是我还没有看到演示如何使用node.js访问mysql数据库的内容。
比如说,假设我想创建一个方法来监听我的数据库表 mysql.something.com(具有database:database、username:username等数据库信息),我该如何使用node.js和socket.io连接到该数据库并监听该表的新输入,并随后返回该输入?
我想知道是否有人能够给我一个使用发布-订阅模式的具体示例。
谢谢帮忙。

Socket.IO不能这样做。你需要使用Node的MySQL模块(npm install mysql记得要安装)来实现。看起来你对基本架构有所误解。 - Bojangles
好的,我想我会编辑我的问题。 - Gavin Sellers
1个回答

2
你需要定期轮询mysql数据库以检测变化,并在检测到变化时发出socket.io事件。以下是伪代码:

你需要定期轮询mysql数据库以检测变化,并在检测到变化时发出socket.io事件。以下是伪代码

var mysql = require('mysql');
var connect = mysql.createConnection({
      host: 'localhost'
    , database: 'your_database'
    , username: 'user'
    , password: 'password'});

var initial_result;

// check for changes after 1 second

setTimeout(function(){

    connect.query('select * from your_table', function(err, result) {
        if(err) { throw new Error('Failed');}
        initial_result = initial_result || result;

        if(Changed(initial_result, result)) { socket.emit('changed', result); }

    });

    function Changed(pre, now) {
  // return true if pre != now
    }


}, 1000); 

4
谢谢你的例子,但我更希望找一个使用发布-订阅模式而非轮询模式的例子。 - Gavin Sellers
据我所知,Mysql没有那种功能。 - az7ar
我可以使用MongoDB来实现这个功能吗?如果我使用setInterval方法,它会频繁地获取数据库。 - Vinoth Kumar
抱歉问题有点傻,但是有一个像这样的JS文件会直接向数据库发送查询,并且把你的数据库登录信息放在js文件里...这样安全吗? - Jack
1
这是 Node.js 代码(服务器端 js),驻留在您的服务器上,而不是客户端(即 Web 浏览器)。 - az7ar
@Jack 如果你百分之百正确地做到了,那就是百分之百安全。比如说,如果你的数据库允许任何人在没有密码的情况下登录,或者你的密码是公开可见的,或者你没有转义查询,或者没有防火墙规则,或者没有加固你的安装,那么它就一点也不安全。我在这个行业见过太多因为认证设置不当而被黑客攻击的数据库。但是如果你遵循基本的安全实践,那就是安全的。换句话说,在这方面它和其他任何编程语言没有什么不同。在实践中不好的JS也同样不好的PHP、Rust、Java、Python等等。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接