Я нашел странное поведение, используя функцию Lambda в веб-сервисах Amazon.Close Mongoose connection Lambda
Я использую узел 4.3 и Mongoose 4.4.17
Идея заключается в том, чтобы проверить и играть с возможностями Lambda.
Я делаю простую модель, и я храню ее в экземпляре Ec2. Код работает нормально, пока я не попытаюсь закрыть соединение. Я знаю, лучшие практики говорят: «Не закрывайте соединение, пусть пул ручка». Ну, это применимо в обычном приложении, но Lambda - это функция без состояния, поэтому, если я не закрываю соединение, это держит открытым, потребляя ресурсы. И это может быть очень плохо, если у вас тысячи запросов в секунду.
Итак, это мой код.
'use strict';
let mongoose = require('mongoose');
//I add this options, because this close my connections
//faster than the 30 min by default
let options = { server: { socketOptions: { keepAlive: 30000, connectTimeoutMS: 30000 } }};
let db = mongoose.createConnection('mongodb://myInternalServerEC2:27017/myDB', options);
let Schema = require('mongoose').Schema;
let TempSchema =new Schema({name:{type:String,required:true}});
//This is a copy paste from an another project,
//but i can remove, but i don't think this has nothing
//with my problem.
personSchema.set('autoIndex', false);
personSchema.index({name:1});
let tempDB = db.model('tempcol', TempSchema);
exports.handler = (event, context, callback) => {
tempDB.find(function (err, data) {
if (typeof(data) === 'object' && data.length === 0) {
data = null;
}
if (!err && data !== null) {
callback(null, data);
} else if (!err) {
error = new Error("No data found");
callback(error);
} else {
callback(err);
}
}).populate('_typeId');
};
Этот код работает без проблем.
Теперь ... позволяет попытаться закрыть соединение. (Ха)
Я использую это в любом случае КСФ, в конце, если, после того, если внутри функции поиска и т.д.
db.close();
callback(null, data);
mongoose.disconnect();
callback('Some error');
//This finish inside the find function
finish(db, function(){
callback(error, data);
});
// A finish function with a callback,
// so i can call the parent callback
function finish(db, cb){
db.close(function(){
cb();
});
}
В каждом отдельном случае. Функция Lambda никогда не возвращает ошибку, возвращает NULL.
У кого-нибудь есть подсказка, почему это поведение в Лямбде? В локальном режиме это поведение никогда не случается со мной раньше.
Если я удалить тесную инструкцию, то лямбда-функция возвращает данные из моего Монго сервера
Thks заранее