我如何获得一个node.js lambda函数来写入postgresql并返回错误/响应?

时间:2019-04-30 17:41:55

标签: node.js postgresql lambda

我正在尝试使用AWS Lambda和node.js构建API,该API将记录写入postgres数据库。然后,我想将数据库的响应作为API响应返回。

我可以从笔记本电脑上执行写操作,但不能作为Lambda函数使用。它似乎似乎没有执行client.query函数。我认为这是因为event.handler异步运行,但是我仍然坚持如何进行这项工作。

第二,我想将res或err传递回client.query函数,以便可以将其作为API响应返回。我不知道如何从查询功能中删除这些内容,甚至在本地运行。

我认为一开始就声明响应会使其具有全局性,但是在调试过程中,在尝试返回响应时未定义它。

const {Client} = require('pg');

var response

exports.handler = async (event) => {

    const body = JSON.parse(event.body);
    const query = {
        text: "insert into testTwo (test) values($1)",
        values: [body.text],
    }

    const client = new Client({
        user: '',
        host: '',
        database: '',
        password: '',
        port: 5432,
    });
    client.connect();

    client.query(query, (err,res) => {
        console.log("Why doesn't this execute?");
        if (err) {
            response = {
                statusCode: 400,
                body: JSON.stringify(err)
            };
        } else {
            response = {
                statusCode: 200,
                body: JSON.stringify(res)
            };
        }
    client.end();

    });

    return response;

};

1 个答案:

答案 0 :(得分:1)

好的,所以我最终使它工作了,尽管这还不是很完美,因为它还不能处理SQL中的错误。

错误是使用回调函数而不是使用client.query作为承诺。通过在promise中添加wait,它使Lambda一直运行直到查询解决。

工作代码如下:

exports.handler = async(event) => {

    const {Client} = require('pg');

    const body = JSON.parse(event.body);
    const query = {
        text: "insert into test (text) values($1)",
        values: [body.text],
    };

    const client = new Client({
        //credentials
    });

    client.connect();

    const result = await client.query(query);
    const resultString = JSON.stringify(result);    

    client.end();

    const response = {
        "statusCode":200,
        "body":resultString
    };

    return response;

};