gpt4 book ai didi

node.js - 如何在 AWS Lambda 中使用 Node pg?

转载 作者:搜寻专家 更新时间:2023-10-31 23:57:45 25 4
gpt4 key购买 nike

UPDATE/SOLVED ... 问题是 pgpass 插件正在寻找 $HOME/.pgpass,而 $HOME 没有在 lambda 上定义,导致 join(undefined , '.pgpass').真的不值得相信自己的答案....

我在 lambda 处理程序中有以下测试代码(从 typescript 编译):

const db = new Pool()
const {rows} = await db.query('select 1 as x')
console.log('rows', JSON.stringify(rows))

连接是通过环境中的 PGHOST PGPORT PGUSER PGDATABASE 创建的。我知道配置“几乎正确”,因为我第一次尝试时得到:

{"errorMessage":"error: no pg_hba.conf entry for host \"10.1.1.249\", user \"foo\", database \"bar\", SSL off\n at Connection.parseE (/var/task/handler.js:9209:11)\n at Connection.parseMessage (/var/task/handler.js:9034:19)\n at Socket. (/var/task/handler.js:8777:22)\n at emitOne (events.js:96:13)\n at Socket.emit (events.js:188:7)\n at readableAddChunk (_stream_readable.js:176:18)\n at Socket.Readable.push (_stream_readable.js:134:10)\n at TCP.onread (net.js:547:20)"}

这看起来很有希望。我更改了 postgres 配置以允许来自子网,然后重试。但是,现在我得到:

2018-02-06 18:14:21.183 (-05:00)    76761ca5-0b93-11e8-8783-a74d098c9f4a    select
2018-02-06 18:14:21.202 (-05:00) 76761ca5-0b93-11e8-8783-a74d098c9f4a TypeError: Path must be a string. Received undefined
at assertPath (path.js:7:11)
at Object.join (path.js:1211:7)
at Object.module.exports.getFileName (/var/task/handler.js:32434:16)
at module.exports (/var/task/handler.js:32355:23)
at Connection.<anonymous> (/var/task/handler.js:31255:9)
at emitOne (events.js:96:13)
at Connection.emit (events.js:188:7)
at Socket.<anonymous> (/var/task/handler.js:8781:12)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
END RequestId: 76761ca5-0b93-11e8-8783-a74d098c9f4a

这是怎么回事?好像它已经到达数据库并第一次连接......现在它在 query 上失败了。我应该使用一些选项吗?

最佳答案

首先,您没有调用 pool.connect从池中获取客户。

其次,AWS Lambda 上当前的 Node.js 运行时 6.10 does not support async functions . (除非您直接使用 Babel 或使用 Babel 的其他一些样板将代码转换为 ES5,例如 es2017-lambda-boilerplate )

话虽如此,您将不得不使用回调或 promise (then/catch)。例如:

const {Pool} = require("pg");

const db = new Pool({
host: "localhost",
user: "database-user",
// ... rest of config options
});

db.connect((err, client, release) => {
if (err) {
console.error("Error acquiring client.", err.stack);
} else {
client.query("SELECT 1 AS x", (err, result) => {
release();
if (err) {
console.error("Error executing query.", err.stack);
} else {
console.log(result.rows);
}
})
}
})

关于node.js - 如何在 AWS Lambda 中使用 Node pg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48653747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com