我一直在使用MLab MongoDB和mongoose库在无服务器(Lambda)处理程序中创建数据库连接。它在本地机器上运行顺畅。但有时它在部署后不起作用。请求返回Internal server error
。奇怪的是有时候它有效。但是,如果我删除数据库连接代码,处理程序工作。无服务器日志只显示Process exited before completing request
。没有真正的错误,所以不知道该怎么做。
db连接如下所示: handler.js
// Connect to database
mongoose.connect(process.env.DATABASE_URL, {
useMongoClient: false
}).then((ee) => {
console.log('------------------------invoke db ', ee);
})
.catch(err => console.error('-----------error db ', err));
这里也没有错误。知道发生了什么吗?
答案 0 :(得分:4)
当您获得Process exited before completing request
时,这意味着{Lambner能够呼叫node
之前callback
进程已崩溃。如果您转到Cloudwatch日志,会发生错误并显示发生的事件的堆栈跟踪。
您应该连接到处理程序中的MongoDB实例,然后在致电callback()
之前先断开连接。
就像这样...
exports.handler = (event, context, callback) => {
let response;
return mongoose.connect(process.env.DATABASE_URL, {
useMongoClient: false
}).then((ee) => {
// prepare your response
response = { hello: 'world' }
}).then(() => {
mongoose.disconnect()
}).then(() => {
// Success
callback(null, response)
}).catch((err) => {
console.error(err);
callback(err);
})
};
答案 1 :(得分:0)
这里是article,详细解释了lambda如何与节点一起工作以及如何实现数据库连接的示例。 与@dashmug建议的不同,您不应断开数据库连接,因为每次连接都会降低性能。