首页 > 解决方案 > 使用 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)
      }
}

标签: javascriptnode.jsasync-awaitnode-postgres

解决方案


问题是您的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);
  }
}


推荐阅读