Как получить лямбда-функцию node.js для записи в postgresql и возврата ошибки / ответа? - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь создать API, используя AWS Lambda & node.js, который записывает запись в базу данных 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 Ответ

1 голос
/ 02 мая 2019

ОК. Итак, в конце концов я все заработал, хотя это и не идеально, так как пока не работает с ошибками в SQL.

Ошибка заключалась в использовании функции обратного вызова вместо использования client.query какОбещание.Добавив ожидание к обещанию, оно продолжало работу 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;

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...