mysql - 使用express显示node mysql结果

标签 mysql node.js express

我正在尝试使用 Node 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这证明了我试图实现的目标是 route 的多个结果。

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 + '/');

最佳答案

如果我理解您的问题正确,您想在调用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 + '/');

关于mysql - 使用express显示node mysql结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39450017/

相关文章:

node.js - 使用 Typescript 自动验证请求的最佳方法是什么?

mysql - SQL 分组平均值

php - HTML 字符按字面翻译

node.js - NodeJS Socket.io Server<-->服务器通信

javascript - mocha 中的“it”无法使用 await 运行

node.js - 错误 : connect ECONNREFUSED at exports. _errnoException 在 TCPConnectWrap.afterConnect

node.js - Jest 卡在 i18n.configure() 中

node.js - Sequelize DataTypes 类型错误 : Cannot read property 'INTEGER' of undefined

php - 有没有 MySQLOData 的文档?

mysql - 如何用2个表指定约束