Результаты запроса NodeJS MySQL к [object Object]

У меня есть этот код:

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.info(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.info("results = " + results + " " + results.length);
                conn.query(sql3, function (err, res, fields) {
                    if (err) throw err;
                    var location = [res[i].latitude, res[i].longitude];
                    console.info("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

Я попытался увидеть, что вызывает это. Я могу получить правильный результат только тогда, когда удаляю условие в запросе. Тем не менее, мне нужно условие, конечно. И мне также интересно, почему он выдает ошибку в следующих запросах, когда я могу получить результаты по первому запросу с условиями и всем остальным.

Я надеюсь, что кто-то может мне помочь, спасибо!

По крайней мере, одной недостающей вещи является замена параметров sql3: sql3 = mysql.format(sql3, sensor);

rodrigoap 14.03.2019 13:43

Нет никаких причин, по которым скрипт падает на var pTime = res[i].timestamp;, если он может читать var sensor = res[i].sensor_id;, попробуйте переписать строку, перед ` res[i]` мог появиться непредвиденный символ, например, неправильный пробел

nook 14.03.2019 14:04

Я отредактировал рассматриваемый код. На самом деле во втором запросе был var sTime = res[i].timestamp;.

nelaaam 14.03.2019 14:13
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
3
2 359
2

Ответы 2

Проблема на самом деле не проблема. когда у вас есть [object Object] в любом console.info, это означает, что то, что вы хотите напечатать в строке, невозможно напечатать так как в строке.

Если вы действительно хотите распечатать результат, что вы должны делать вместо

conn.query(sql2, function (err, results, fields) {
    if (err) throw err;
    console.info("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.info("Data = " + sensor + " " + pTime + " " + sTime + " " + latitude  + " " + longitude); // HERE
    });
});

На самом деле :

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

Смотрите обозначения console.info({ variable }); Это позволяет вам регистрировать ваше переменное содержимое с ключом, отображаемым слева, как вы действительно хотели бы сделать в своих текущих console.infos.

Пример :


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

console.info({ results, randomString});

Это выводит:

См. мой комментарий к вашему сообщению об исключении @nelaaam

nook 14.03.2019 14:06

О, я был в состоянии видеть, что я получаю результаты. Но как мне сохранить его в переменной? Он по-прежнему выдает TypeError: Невозможно прочитать свойство «широта» неопределенного. Является ли мой способ получения данных (res[i].latitude) неверным?

nelaaam 14.03.2019 14:09

Посмотрите параметры функции. Ваша ссылка res больше не та, которую вы выполняете, а переменная, которую вы имеете в обратном вызове функции. (в conn.query(sql3, function (err, res, fields) {)

nook 14.03.2019 14:17

Я уже пытался изменить имя переменной, но все равно выдает ошибку.

nelaaam 14.03.2019 14:22

Тогда это, вероятно, проблема масштаба. Попробуйте сохранить свой первый параметр обратного вызова в переменной перед вводом другого обратного вызова.

nook 14.03.2019 14:24

Это была переменная i. Спасибо!

nelaaam 14.03.2019 14:26

Не забудьте подтвердить ответ на свой пост

nook 14.03.2019 15:05

Вы не можете одновременно использовать комбинацию строки и объекта.

Попробуйте формат ниже, это может вам помочь.

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

Другие вопросы по теме