我有此代码:
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
我试图查看是什么原因造成的。仅当我删除查询中的条件时,我才能获得正确的结果。但是,我当然需要条件。而且我还想知道,当我能够在第一个查询中获得条件和所有条件时,如何在以下查询中引发错误。
我希望有人能帮助我,谢谢!
答案 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});
答案 1 :(得分:0)
您不能一次控制字符串和对象的组合。
尝试以下格式,可能会对您有所帮助。
console.log('results =');
console.log(results);
console.log(results.length);