【问题标题】:How to access mysql database with socket.io如何使用 socket.io 访问 mysql 数据库
【发布时间】:2022-01-06 01:10:45
【问题描述】:

我刚刚开始编写服务器端 javascript,并且一直在阅读有关 socket.io 和 node.js 的教程,但我没有遇到任何演示如何使用 node.js 访问 mysql 数据库的内容。

比如说我想创建一个方法来监听我的数据库中的一个表 mysql.something.com(带有数据库:数据库,用户名:用户名等),如何 我使用 node.js 获取 socket.io 以连接到该数据库并侦听该表的新输入,然后返回该输入?

我想知道是否有人可以给我一个使用发布订阅模型的具体示例。

感谢您的帮助。

【问题讨论】:

  • Socket.IO 不能。您需要使用 Node 的 MySQL 模块 (npm install mysql IIRC) 并使用它。听起来你误解了基本结构
  • 哦,好吧。我想我会编辑我的问题。

标签: mysql node.js socket.io serverside-javascript


【解决方案1】:

您必须定期轮询 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); 

【讨论】:

  • 感谢您的示例,但我正在寻找更多使用发布订阅模型而不是轮询模型的东西。
  • 据我所知Mysql没有这种功能
  • 我可以使用 mongodb 来做到这一点吗?如果我给 setinterval 意味着它会经常获取数据库。
  • 抱歉这个愚蠢的问题,但是有一个像这样的 JS 文件对数据库进行实时查询并将您的数据库登录到一个 js 文件中......?这有多安全?
  • 这是 Node.js 代码(服务器端 js)并在您的服务器上执行,而不是客户端(即 Web 浏览器)。
【解决方案2】:

如果你已经解决了你的问题,我不知道,但昨天我也遇到了这个问题。我想看一个 node.js、socket.io 和 mysql 的例子。所以我在 youtube 上搜索了很多,发现只有这个..https://www.youtube.com/watch?v=Pw_AhwvxU58.

我希望我能以某种方式帮助你。

【讨论】:

    【解决方案3】:

    我想知道在处理用户登录时这是否可能?我正在尝试创建一个聊天室,用户可以在其中注册并登录,然后开始聊天。我在拉取用户名以通过套接字聊天系统时遇到问题。

    > `  passport.use(new JWTStrategy({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      secretOrKey: process.env.SECRET
    }
      , async function ({ id }, cb) {
        try {
          const user = await User.findOne({ where: { id }, include: [Post] } )
          cb(null, user)
          socket.emit('username', user.User.username)
        } catch (err) {
          cb(err, null)
        }
      }))`
    

    这只是我在阅读了你们上面发布的内容后发出用户名的糟糕尝试。我不确定这是否可行,但我想知道从这个异步函数中提取 user.User.username 并将其发送到套接字是否允许我在聊天中使用用户名。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多