一个简单的Nodejs MySQL查询

时间:2017-12-27 16:08:40

标签: javascript mysql node.js

我正在尝试将mysql与nodejs一起使用:尝试运行查询:select count(*) from TABLE。 结果显示为

[ RowDataPacket { 'count(*)': 33 } ]

我只想要33作为答案,javascript骨架代码如下

var express = require('express');
var router = express.Router();
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "honolulu",
  password: "honolulu",
  database: "db"
});


con.connect(function(err) {
  if (err) throw err;
  console.log("Connected to question database file 1!");
});
var but=20
con.query('select count(*) from qpsc',function (err, result) {
    if (err) throw err;
    but=result;
    console.log(but);
  });
/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});
router.get('/file', function(req, res, next) {
  res.render('index2',{ num_buttons: '20'});
  // console.log("RENDERED FROM INDEX.js");
});

module.exports = router;

那么,我该怎么办? 请帮忙。

3 个答案:

答案 0 :(得分:2)

结果是:

[ RowDataPacket { 'count(*)': 33 } ]

您可以通过以下方式获取33

var theCount = result[0]['count(*)'];

所以,你的代码改编了,它将是:

con.query('select count(*) from qpsc',function (err, result) {
  if (err) throw err;
  but = result[0]['count(*)'];
  console.log(but);
});

答案 1 :(得分:1)

您的结果变量是一个对象数组,其中包含查询中所选每个字段的键。

您可能会在result[0]["count(*)"]条目中找到您的点数但这有点难看。

我建议在SQL查询中使用别名,使其更优雅:

select count(*) as many from qpsc

这样,您可以像这样检索您的计数:

var yourCount = result[0].many;

答案 2 :(得分:0)

如果重命名SQL查询中的字段,则可以将其作为属性进行访问。因此,如果您使用"select count(*) AS 'result' from TABLE";,则可以访问33作为row.result或您在SQL查询中使用的任何其他名称。

所以我通常做的是别名我请求的所有SQL字段,然后将所有行推送到一个数组,然后用Object.assign映射该数组,将所有RowDataPackets转换为普通对象。

我使用以下结构来使用mysql模块:

const NOOP = () => {};
const server = {
  "host" : "localhost",
  "user" : "honolulu",
  "password" : "honolulu",
  "database" : "db"
};
const connection = MYSQL.createConnection( server );
connection.connect( error => {
    if ( error ) {
        // handle error
    }
    // else NOOP();
} );
const sql = "select count(*) AS 'result' from TABLE";
const query = connection.query( sql );
const resultSet = [];
query.on( 'error', error => {
    // handle query error
} );
// Incoming field packets, if any, preceding the resultSet rows. No operation.
query.on( 'fields', NOOP );
// Every time a row gets returned, this handler is triggered.
query.on( 'result', row => resultSet.push( row ) );
// All rows have been returned
query.on( 'end', () => {
    // do something with the resultSet.
} );