将node.js-mysql结果返回给函数

 晨曦微露jie 发布于 2023-02-02 19:47

我有两个node.js文件:server.js和database.js。我希望我的socket.io发出发生在server.js中,而数据库查询发生在database.js中。Server.js:

// init
io.sockets.on('connection', function(socket) {
    initdb = db.initdb();
    console.log(initdb)
});

我的database.js基本上包含以下代码:

function query(queryString) {
    connection = mysql.createConnection({
        host: '12.23.45.67',
        user: 'user',
        password: 'password',
        database: 'database'
    });

    connection.connect();

    var res = connection.query(queryString, function(err, rows, fields) {
        if (err) throw err;
    });

    connection.end();
}


// export initdb for external usage by server.js
exports.initdb = function() {
    var initdb = query("SELECT * FROM columns;");
};

我的问题是我希望将connection.query函数中的行对象返回给我的initdb函数。但是,我可以记录该对象的唯一位置是该函数内。如何传递查询结果,以便可以从server.js发出JSON对象?

1 个回答
  • 请记住,该节点是异步的。因此,在大多数情况下,您是通过回调而不是作为函数的返回值来获取数据的。

    您需要将回调链接到查询发生的位置,例如:

    // in database.js
    exports.initdb = function(cb) {
      query("SELECT * FROM columns", cb)
    }
    
    function query(queryString, cb) {
      // .. stuff omitted
    
      var res = connection.query(queryString, function(err, rows, fields) {
        connection.end();
        if (err) return cb(err);
        cb(null,rows);
      });
    
    // in server.js
    io.sockets.on('connection', function(socket) {
      db.initdb(function(err,rows) {
        if (err) {
          // do something with the error
        } else {
          console.log(rows)
        }
      });
    });
    

    该回调将是一个带有2个参数err和的函数rows。您的server.js代码需要检查的值err并采取相应的措施,否则将带有rows

    2023-02-02 19:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有