【问题标题】:Display node mysql results using express使用 express 显示节点 mysql 结果
【发布时间】:2016-09-12 12:10:56
【问题描述】:

我正在尝试使用节点 mysql 显示多行,但我一直无法将结果输入到路由中。

看看我下面的代码,我可以在路由外控制所有结果,但它只会在路由内控制 1 个结果。

var port = process.env.PORT || 3000,
express = require('express'),
app = express();

app.set('view engine', 'ejs');

var mysql = require('mysql');
var connection = mysql.createConnection({
    host: 'blablabla.com',
    user: 'user',
    password: 'password',
    database: 'database'
});

connection.connect(function(err) {
    if (err) {
        console.error('error connecting: ' + err.stack);
        return;
    }
    console.log('connected as id ' + connection.threadId);
});

/// start query
var query = connection.query('SELECT * FROM table LIMIT 3');
query
    .on('error', function(err) {
        console.log(err);
    })
    .on('result', function(row) {

        console.log(row); /// displays all 3 results

        app.get('/', function(req, res) {
            res.send(row); /// displays only 1 result
            console.log(row); /// displays only 1 result
        });
    });


/// end query
connection.end();
app.listen(port);
console.log('Server running at http://127.0.0.1:' + port + '/');

编辑

经过大量研究后,我偶然发现了这个https://youtu.be/g-_l_v_uX6E?t=15m36s,它展示了我试图实现的目标,即路线中的多个结果。

var port = process.env.PORT || 3000,
express = require('express'),
app = express();

app.set('view engine', 'ejs');

var mysql = require('mysql');
var connection = mysql.createConnection({
  host     : 'blablabla.com',
  user     : 'user',
  password : 'pass',
  database : 'database'
});

connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }

  console.log('connected as id ' + connection.threadId);
});

var units = null;

connection.query('SELECT * FROM table LIMIT 3', function(err, rows, fields){
      if(err) throw err;
      units = rows;

      connection.end();
      app.get('/', function(req, res) {
        res.send(units); /// multiple results to the browser
      });
});

app.listen(port);
console.log('Server running at http://127.0.0.1:' + port + '/');

【问题讨论】:

    标签: mysql node.js express


    【解决方案1】:

    如果我理解您的问题是正确的,您想在致电http://127.0.0.1... 时获取您的数据库信息吗?

    如果是这样,您需要对代码进行一些小的修改:

    var port = process.env.PORT || 3000,
    express = require('express'),
    app = express();
    
    app.set('view engine', 'ejs');
    
    var mysql = require('mysql');
    var connection = mysql.createConnection({
        host: 'blablabla.com',
        user: 'user',
        password: 'password',
        database: 'database'
    });
    
    
    function getRows(res){
        connection.connect(function(err) {
            if (err) {
                console.error('error connecting: ' + err.stack);
                return;
            }
            console.log('connected as id ' + connection.threadId);
    
            /// start query
            var query = connection.query('SELECT * FROM table LIMIT 3');
            query
                .on('error', function(err) {
                    connection.end(); /// end query
                    console.log(err);
                })
                .on('result', function(row) {
    
                    res.send(row); /// displays only 1 result
                    console.log(row); /// displays only 1 result
                    connection.end(); /// end query
                    console.log(row); /// displays all 3 results
                    return;
                });
       });
    
    }
    
    
    app.get('/', function(req, res) {
                getRows(res);
    
    });
    
    app.listen(port);
    console.log('Server running at http://127.0.0.1:' + port + '/');
    

    【讨论】:

    • 您好,感谢您的快速响应,app.get 路由中的所有内容都未定义?并且代码会引发events.js:16 throw er; // Unhandled 'error' event 错误,如果我注释掉connection.end();,该错误就会消失
    • 如果你注释掉connection.end(),行还是undefined
    • 是的,很遗憾,抱歉:)
    • 更新了我的解决方案,试试吧! :)
    • 很抱歉,node_modules/mysql/lib/protocol/Parser.js:78 throw err; // Rethrow non-MySQL errors 后跟 Error: Can't set headers after they are sent. 并且当我在 connection.end(); 之后放置 res.send(row); 时仍然显示一个结果我在 connection.end(); 之前注释掉了之前的 res.send(row); 跨度>
    猜你喜欢
    • 2019-11-16
    • 1970-01-01
    • 2017-11-26
    • 2018-07-14
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    相关资源
    最近更新 更多