Node.js aws Lambda函数和postgres DB存在问题
这一天我遇到了aws lambda的问题。我需要通过向lambda传递用户名在RDS postgres db中搜索,但在每个测试事件中,它都会返回:Node.js aws Lambda函数和postgres DB存在问题,node.js,postgresql,amazon-web-services,aws-lambda,Node.js,Postgresql,Amazon Web Services,Aws Lambda,这一天我遇到了aws lambda的问题。我需要通过向lambda传递用户名在RDS postgres db中搜索,但在每个测试事件中,它都会返回: "{ "errorMessage": "RequestId: 070f76a4-41c6-40d1-8ef2-0a84d9c04af0 Process exited before completing request" }" 尤其是堆栈返回: 启动请求ID:070f76a4-41c6-40d1-8ef2-0a84d9c04af0版本:$LAT
"{
"errorMessage": "RequestId: 070f76a4-41c6-40d1-8ef2-0a84d9c04af0 Process exited before completing request"
}"
尤其是堆栈返回:
启动请求ID:070f76a4-41c6-40d1-8ef2-0a84d9c04af0版本:$LATEST
2019-03-31T12:32:19.572Z 070f76a4-41c6-40d1-8ef2-0a84d9c04af0类型错误:
路径必须是字符串。接收未定义
在assertPath(path.js:28:11)
在Object.join(path.js:1236:7)
在Object.module.exports.getFileName(/var/task/node_modules/pgpass/lib/helper.js:61:16)
在module.exports(/var/task/node_modules/pgpass/lib/index.js:10:23)
在连接处。(/var/task/node_modules/pg/lib/client.js:110:9)
在emitOne(events.js:116:13)
在Connection.emit(events.js:211:7)
在插座上。(/var/task/node_modules/pg/lib/connection.js:125:12)
在emitOne(events.js:116:13)
在Socket.emit(events.js:211:7)结束请求ID:070f76a4-41c6-40d1-8ef2-0a84d9c04af0报告请求ID:
070f76a4-41c6-40d1-8ef2-0a84d9c04af0持续时间:583.72毫秒计费
持续时间:600毫秒内存大小:128 MB最大使用内存:35 MBRequestId:070f76a4-41c6-40d1-8ef2-0a84d9c04af0进程在之前退出 完成请求
我希望Lambda返回数据库中所有用户名与我传递的用户名相似的用户。我浏览了,没有找到任何对
onSuccess
和onFailure
事件的引用,但在回调中只找到err
和res
对象(但我可能忽略了它):
但是,它还支持promise版本,这意味着您不必亲自承诺:
try {
const res = await pool.query(text, values)
console.log(res.rows[0])
// { name: 'brianc', email: 'brian.m.carlson@gmail.com' }
} catch(err) {
console.log(err.stack)
}
这意味着您的searchUser
函数应该如下所示:
const searchUser = username => {
return await psql.query('SELECT username FROM utilitator where username LIKE $1', [`%${username}%`])
};
最后,在处理程序上,因为您已经在使用节点8,所以不应该将承诺和回调混合在一起。只需在响应对象内以字符串化JSON的形式返回主体,如下所示(为了简单起见,省略了错误处理):
我正在浏览,没有找到任何对
onSuccess
和onFailure
事件的引用,但在回调中只找到err
和res
对象(但我可能忽略了它):
但是,它还支持promise版本,这意味着您不必亲自承诺:
try {
const res = await pool.query(text, values)
console.log(res.rows[0])
// { name: 'brianc', email: 'brian.m.carlson@gmail.com' }
} catch(err) {
console.log(err.stack)
}
这意味着您的searchUser
函数应该如下所示:
const searchUser = username => {
return await psql.query('SELECT username FROM utilitator where username LIKE $1', [`%${username}%`])
};
最后,在处理程序上,因为您已经在使用节点8,所以不应该将承诺和回调混合在一起。只需在响应对象内以字符串化JSON的形式返回主体,如下所示(为了简单起见,省略了错误处理):
好的,我试过了,但没有接受searchUser中的Wait,但没有成功。唯一的问题是身体里是空的,这显然是另一个问题。你再也不会有例外了。如果body为null,则很可能是查询中存在错误或表为空。查询中存在错误。我已相应地编辑了我的答案。为方便起见,以下是您应该如何调用查询
return await psql.query('SELECT username FROM utilitor where username LIKE$1',[`%${username}%`])
Ok我在searchUser中尝试过,但没有接受wait,但它不起作用。唯一的问题是身体里是空的,这显然是另一个问题。你再也不会有例外了。如果body为null,则很可能是查询中存在错误或表为空。查询中存在错误。我已相应地编辑了我的答案。为方便起见,以下是您应该如何调用查询return wait psql.query('SELECT username FROM utilitor where username LIKE$1',[`%${username}%`])
exports.handler = async (event) => {
//const body = JSON.parse(event.body);
const username = event.username;
const result = await searchUser(username)
if (result == "err") {
return {
"statusCode": 404,
"isBase64Encoded": false,
"body": JSON.stringify({message: 'User not found'}),
}
}
return {
"statusCode": 200,
"isBase64Encoded": false,
"body": JSON.stringify(result),
}
};