UPDATE / SOLVED ...问题是pgpass插件正在寻找$ HOME / .pgpass,并且$ HOME没有在lambda上定义,导致{{1}失败}。真的不值得为自己提供答案......
我在lambda处理程序中有以下测试代码(从typescript编译):
join(undefined, '.pgpass')
通过环境中的PGHOST PGPORT PGUSER PGDATABASE创建连接。我知道配置是"几乎是正确的"因为我第一次尝试它时得到了:
{" errorMessage":"错误:主机没有pg_hba.conf条目\" 10.1.1.249 \", 用户\" foo \",数据库\" bar \",SSL off \ n at Connection.parseE(/var/task/handler.js:9209:11) Connection.parseMessage(/var/task/handler.js:9034:19)nn at 插座。 (/var/task/handler.js:8777:22)nn在emitOne (events.js:96:13)\ n在Socket.emit(events.js:188:7)\ n at readableAddChunk(_stream_readable.js:176:18)\ n at TCP.onread中的Socket.Readable.push(_ stream_readable.js:134:10)\ n (net.js:547:20)"}
这看起来很有希望。我将postgres配置更改为允许来自子网,并再次尝试。但是,现在我得到了:
const db = new Pool()
const {rows} = await db.query('select 1 as x')
console.log('rows', JSON.stringify(rows))
发生了什么事?它似乎已经进入数据库并第一次连接......现在它在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
上失败了。我应该使用一些选项吗?
答案 0 :(得分:1)
首先,您没有要求pool.connect从池中获取客户端。
其次,AWS Lambda does not support async functions上的当前Node.js运行时6.10。 (除非您使用Babel直接将代码转换为ES5或使用Babel的其他样板文件(例如es2017-lambda-boilerplate)
话虽如此,你必须使用回调或承诺(然后是/ catch)。例如:
memmove(dest, dest + strlen(c) - 1, 1 + strlen(dest + strlen(c)));