2017-12-27 237 views
0

我想用nodejs使用mysql:試圖運行查詢:select count(*) from TABLE。 結果出來作爲一個簡單的Nodejs MySQL查詢

[ 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;

所以,我應該怎麼辦? 請幫忙。

回答

1

你的結果變量是

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

你可以得到33一個對象數組,在查詢中選擇每個字段的鍵。

您可能會在result[0]["count(*)"]條目中找到您的計數,但這有點醜陋。

我會建議使用的別名在您的SQL查詢,使其更加優雅:

select count(*) as many from qpsc 

這樣的話,你可以檢索你的計數是這樣的:

var yourCount = result[0].many; 
2

由於結果是:

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); 
}); 
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. 
});