当我通过云函数(Node.js)传递数据时,如何从Flutter应用程序中的PostgreSQL中获取所选行的数据?



我使用Cloud Function从云中的PostgeSQL服务器获取行,并将查询结果返回到Flutter应用程序。

以下是云函数(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<…>

所以我得到的不是实际的数据,而是每一列的描述。

问题是如何获得实际的行?

感谢

在这行代码return await pgPool.query(queryString);中,您将返回整个响应对象,而您只需要行,所以执行以下操作:

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

你也可以选择像Sequelize或TypeOrm这样的ORM(如果你使用Typescript(,这将使DB查询更容易,验证数据等。

关于JSON响应,云函数应该将返回的JS对象/数组转换为JSON,而如果您决定在云函数之上使用Express,只需使用Expressres.json(result.rows)

相关内容

  • 没有找到相关文章

最新更新