我正在尝试使用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;
};
答案 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;
};