我正在尝试将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;
那么,我该怎么办? 请帮忙。
答案 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.
} );