javascript - 使用 node-postgres 执行查询时,aws lambda 不返回任何内容
问题描述
我有一个异步函数,它使用 pg 来执行函数查询。它没有返回任何东西,我不确定这是否是我调用异步函数的方式是问题所在。response_test 总是作为一个空的 json 对象返回
const pg = require('pg');
const Query = require('pg').Query;
const pool = new pg.Pool();
const response = {...my format for response..}
module.exports.login = (event, context, callback)=> {
try{
var client = new pg.Client(conn);
client.connect();
var query = "select a_function_that_returns_1_row($1, $2)";
var params = ['param1', 'param2'];
var reponse_test = get_token(query, params);
client.end();
response.body = JSON.stringify(
{
reponse_test
}
)
callback(null, response);
} catch(err){
serverError.body = JSON.stringify({
error: err
});
callback(null, serverError);
}
}
async function get_token(query, params){
try {
const res = await pool.query(query, params);
return res.rows[0];
} catch (err) {
console.log(err.stack)
}
}
解决方案
问题是您的get_token
方法是异步的,但您在调用时没有等待它。你也不需要回调。只需使您的 lambda 函数异步并返回响应。像这样的东西
const pg = require("pg");
const Query = require("pg").Query;
const pool = new pg.Pool();
const response = {};
module.exports.login = async event => {
try {
const client = new pg.Client(conn);
client.connect();
const query = "select a_function_that_returns_1_row($1, $2)";
const params = ["param1", "param2"];
const reponse_test = await get_token(query, params);
client.end();
response.body = JSON.stringify(
{
reponse_test
}
);
return response;
} catch (err) {
serverError.body = JSON.stringify({
"error": err
});
return serverError;
}
};
async function get_token(query, params) {
try {
const res = await pool.query(query, params);
return res.rows[0];
} catch (err) {
console.log(err.stack);
}
}