MySQL XDevApi Nodejs: Как мне преобразовать строки результатов в JSON или что-то, что клиент может проверить свойства и набор строк? - PullRequest
0 голосов
/ 02 августа 2020

Модель данных

sess.getSchema("myschema").getTable("mymix").select(['recId', 'JSONdoc']).execute()
                    .then
                    (
                        goodResult=>
                        {
                            cbFunc(null, goodResult)
                        },
                        badResult =>
                        {
                            console.log("err");
                            cbFunc(badResult)
                        }
                    );

затем Контроллер:

obj.findAll((er, data) =>  // (er, data) is cbFunc
    {
        if (er)
            res.status(500).send(er);
        else
            res.status(200).send(data);
    });

Я вижу, что было возвращено 11 записей, но res.status(200).send(data); становится {} в Postman

enter image description here

Question 1, how do I turn the 11 records into navigatable resultset or JSON back to caller?

Question 2, according to https://dev.mysql.com/doc/dev/connector-nodejs/8.0/module-Result.html, goodResult.getAffectedItemsCount() предполагаемый возврат 11, но это 0.

1 Ответ

1 голос
/ 03 августа 2020

Вопрос 1

Предполагая, что вы используете какой-то HTTP-фреймворк (похоже, в соответствии с доступными деталями), вы не можете просто вернуть клиенту значение который разрешается Promise, возвращаемым execute().

В этом случае вы получаете экземпляр RowResult, который не может быть напрямую сериализован в JSON, потому что доступ к самим данным происходит с такими функциями, как fetchOne() и fetchAll(). Эти методы необходимо вызывать для создания сериализуемой структуры данных (например, простого объекта или массива JavaScript) на стороне сервера перед отправкой его обратно клиенту.

В этом случае select() даст только один набор результатов, что означает, что вы можете просто вызвать fetchAll() и закончить с ним, или l oop через этот набор результатов, используя fetchOne() (см. Примеры в документации). Это означает, что вы можете сделать следующее:

sess.getSchema("myschema").getTable("mymix").select(['recId', 'JSONdoc'])
  .execute()
  .then(goodResult => {
    cbFunc(null, goodResult.fetchAll())
  })

Вопрос 2

Затронутые элементы - это только элементы, которые каким-то образом были изменены в результате операции. Это справедливо только для операций DML, таких как insert(), delete() и update(). В этом случае, поскольку вы просто извлекаете данные из таблицы с помощью select(), затронутых элементов не будет.

Отказ от ответственности: я ведущий разработчик MySQL X DevAPI Connector для Node.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...