NodeJS MySQL查询结果到[object Object]

时间:2019-03-14 12:34:46

标签: mysql node.js

我有此代码:

var sql1 = "SELECT DISTINCT sensor_id, timestamp FROM Displacement_Record WHERE wave_type = 1 ORDER BY timestamp ASC";
var sql2 = "SELECT timestamp FROM Displacement_Record WHERE wave_type = 0 AND sensor_id = ?";
var sql3 = "SELECT latitude, longitude FROM Sensor_Record WHERE sensor_id = ?";
var pTime, sTime;

db.getConnection((err, conn) => {
    if (err) throw err;
    conn.query(sql1, function (err, res, fields) {
        if (err) throw err;
        for (i = 0; i < res.length; i++) {
            var sensor = res[i].sensor_id;
            console.log(sensor);
            var pTime = res[i].timestamp;
            sql2 = mysql.format(sql2, sensor);
            conn.query(sql2, function (err, results, fields) {
                if (err) throw err;
                var sTime = res[i].timestamp; //timestamp error
                console.log("results = " + results + " " + results.length);
                conn.query(sql3, function (err, res, fields) {
                    if (err) throw err;
                    var location = [res[i].latitude, res[i].longitude];
                    console.log("Data = " + sensor + " " + pTime + " " + sTime + " " + latitude + " " + longitude);
                });
            });
        }
    });
    conn.release();
});

第一个查询可以给我正确的结果。我能够获取并存储所需的数据。但是,第二和第三个查询结果为:

results = [object Object],[object Object],[object Object] 

并抛出:

    throw err; // Rethrow non-MySQL errors
        ^
TypeError: Cannot read property 'timestamp' of undefined

我试图查看是什么原因造成的。仅当我删除查询中的条件时,我才能获得正确的结果。但是,我当然需要条件。而且我还想知道,当我能够在第一个查询中获得条件和所有条件时,如何在以下查询中引发错误。

我希望有人能帮助我,谢谢!

2 个答案:

答案 0 :(得分:3)

问题实际上并不是真正的问题。当您在任何console.log中拥有[object Object]时,这意味着您要以字符串形式打印的内容无法以 as 字符串的形式打印。

如果您真的要打印结果,应该做什么而不是

conn.query(sql2, function (err, results, fields) {
    if (err) throw err;
    console.log("results = " + results + " " + results.length); // HERE
    conn.query(sql3, function (err, res, fields) {
        if (err) throw err;
        var location = [res[i].latitude, res[i].longitude];
        console.log("Data = " + sensor + " " + pTime + " " + sTime + " " + latitude  + " " + longitude); // HERE
    });
});

实际上是

conn.query(sql2, function (err, results, fields) {
    if (err) throw err;
    console.log("results ="); // HERE
    console.log({ results }, results.length); // HERE
    conn.query(sql3, function (err, res, fields) {
        if (err) throw err;
        var location = [res[i].latitude, res[i].longitude];
        console.log("Data = "); // HERE
        console.log({ sensor, pTime, sTime, latitude, longitude }); // HERE
    });
});

请参阅符号console.log({ variable }); 这样一来,您便可以像实际在当前console.logs中那样,使用左侧显示的键记录变量内容。

示例:


const results = [1, 2, 3, 4];
const randomString = 'Some content in here';

console.log({ results, randomString});

输出: enter image description here

答案 1 :(得分:0)

您不能一次控制字符串和对象的组合。

尝试以下格式,可能会对您有所帮助。

console.log('results =');
console.log(results);
console.log(results.length);