【发布时间】:2020-01-11 12:31:04
【问题描述】:
我是 JS 新手,所以这可能是一些愚蠢的麻烦。我有一个用 NodeJS 10.x 编写的 lambda,我正在尝试添加 MongoDB Atlas 插入。我已经开始学习本教程:https://docs.atlas.mongodb.com/best-practices-connecting-to-aws-lambda/
这是我的代码:
const MongoClient = require('mongodb').MongoClient;
let cachedDb = null;
function connectToDatabase (uri) {
console.log('Connect to mongo database');
if (cachedDb) {
console.log('Using cached database instance');
return Promise.resolve(cachedDb);
}
return MongoClient.connect(uri)
.then(db => {
console.log('Successful connect');
cachedDb = db;
return cachedDb;
}).catch(err => {
console.log('Connection error occurred: ', err);
callback(err);
});
}
function insertUser(db, email) {
console.log('=> modify database');
return db.collection('users').insertOne({"email" : email})
.then(() => { callback(null, result); })
.catch(err => {
console.log('Insert error occurred: ', err);
callback(err);
});
}
exports.handler = (payload, context, callback) => {
const { email, password } = JSON.parse(payload.body);
context.callbackWaitsForEmptyEventLoop = false;
connectToDatabase(MONGODB_URI)
.then(db => {
console.log('Mongo connected')
insertUser(db, email);
})
.then(result => {
console.log('Mongo insert succeeded', result);
})
.catch(err => {
console.log('Mongo insert failed', err);
return responses.INTERNAL_SERVER_ERROR_500(err, callback, response);
});
console.log('finished mongo stuff');
我可以在 CloudWatch 中看到以下日志:
START RequestId: 0338d336-7d33-40d5-abc7-1511f1c9ea4c Version: $LATEST
2020-01-11T12:18:00.808Z 0338d336-7d33-40d5-abc7-1511f1c9ea4c INFO Connect to mongo database
2020-01-11T12:18:00.855Z 0338d336-7d33-40d5-abc7-1511f1c9ea4c INFO finished mongo stuff
2020-01-11T12:18:01.416Z 0338d336-7d33-40d5-abc7-1511f1c9ea4c ERROR (node:8) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
END RequestId: 0338d336-7d33-40d5-abc7-1511f1c9ea4c
该项目未插入 Atlas。我添加了更详细的日志记录,但未显示。如果 mongo 连接失败,则会出现错误。但似乎错误处理程序被忽略了。问题出在哪里?
【问题讨论】:
-
请注意,您有多个
callback调用(在connectToDatabase和insertUser中)都将失败,因为callback未定义。 -
应该不会抓到检测吧?
-
你是在暗示这是一个深思熟虑的策略吗?
-
我不是在问,而是在问。我希望 catch 语句可以捕获各种错误,不是吗?
-
这意味着它从未尝试执行该回调,因此从未触发异常。您的整个 Lambda 在到达该点之前已完成、失败或超时。
标签: node.js mongodb aws-lambda