Как мне получить данные из выбранных строк в PostgreSQL из приложения Flutter, когда я передаю их через облачную функцию (Node.js)? - PullRequest
0 голосов
/ 05 августа 2020

Я использую Cloud Function для извлечения строк с сервера Postge SQL в облаке и возврата результата запроса в приложение Flutter.

Вот код в Cloud Function (Node.js):

// Defining pgPool
const pg = require('pg');
var pgPool;

// Open connection to Postgres
if (pgPool == null) {
  pgPool = new pg.Pool(pgConfig);
}

exports.getUser = functions
  .runWith({ memory: "256MB", timeoutSeconds: 10 })
  .https.onCall(async (data, context) => {
   
   const queryString = `select * from users where uid=${data[uid]}`;

   return await pgPool.query(queryString);
});

Вот как я вызываю функцию в моем приложении Flutter,

final HttpsCallable getUser = CloudFunctions.instance
   .getHttpsCallable(functionName: 'getUser');

final response = await getUser.call({uid: uid});

// Print the result
print('Got data: ${response.data}');

Я получил данные в порядке, но данные выглядят так:

flutter: Got data: {fields: [{format: text, dataTypeSize: -1, columnID: 1, dataTypeModifier: 24, tableID: 16442, name: pid, dataTypeID: 1043}, {format: text, dataTypeSize: -1, columnID: 2, dataTypeModifier: 32, tableID: 16442, name: uid, dataTypeID: 1043}, {format: text, dataTypeSize: -1, columnID: 2, dataTypeModifier: 54, tableID: 16416, name: name, dataTypeID: 1043}, {format: text, dataTypeSize: -1, columnID: 4, dataTypeModifier: 10, tableID: 16442, name: cid, dataTypeID: 1043}, {format: text, dataTypeSize: -1, columnID: 3, dataTypeModifier: 24, tableID: 16442, name: aid, dataTypeID: 1043}, {format: text, dataTypeSize: -1, columnID: 6, dataTypeModifier: 354, tableID: 16442, name: msg, dataTypeID: 1043}, {format: text, dataTypeSize: 8, columnID: 5, dataTypeModifier: -1, tableID: 16442, name: crd, dataTypeID: 1114}, {format: text, dataTypeSize: 8, columnID: 7, dataTypeModifier: -1, tableID: 16442, name: upd, dataTypeID: 1114}, {format: text, dataTypeSize: 4, columnID: 8, dataTypeModifier: -1, t<…>

Так что вместо фактических данных я получил описание каждого столбца.

Вопрос в том, как мне получить фактические строки?

Спасибо

1 Ответ

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

В этой строке кода return await pgPool.query(queryString); вы возвращаете весь объект ответа , тогда как вам нужны только строки, поэтому сделайте что-то вроде этого:

const result = await pgPool.query(queryString)
return result.rows

You также можно выбрать ORM, например Sequelize или TypeOrm (если вы используете Typescript), который упростит запросы к БД, проверяет данные и т. д. c.

О JSON ответ, облако Функции должны преобразовываться в JSON возвращаемый объект / массив JS, вместо этого, если вы решите использовать Express поверх облачных функций, просто используйте Express res.json(result.rows)

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