aws lambda ничего не возвращает при использовании node- postgres для выполнения запроса - PullRequest
0 голосов
/ 08 марта 2020

У меня есть функция asyn c, которая использует pg для выполнения запроса для функции. Это ничего не возвращает, я не уверен, что проблема в том, как я называю свою функцию asyn c. Тест 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)
      }
}

1 Ответ

1 голос
/ 08 марта 2020

Проблема в том, что ваш get_token метод asyn c, но вы не ожидаете его во время вызова. Вам также не нужен обратный звонок. Просто сделайте вашу лямбда-функцию asyn c и верните ответ. Как то так

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);
  }
}

...