Невозможно подключиться к MongoDB из AWS Lambda - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь создать навык alexa, который подключается к mlab по запросу.Я поместил несколько сообщений console.log () в мой код и заметил, что консоль внутри

db.once ('open', callback () {console.log ('a');}) не выполняется.

При просмотре журналов CloudWatch я получаю следующее сообщение:

REPI RequestId: 1b57c8f8-61b6-11e8-9038-5fc7c131d222 Продолжительность: 40,54 мс Объявленная продолжительность: 100мс Размер памяти: 128 МБ Макс. используемая память: 51 МБ

Я использовал стандартные операторы подключения, как предписано mongoose:

"use strict";
var Alexa = require("alexa-sdk");
const mongoose = require("mongoose");
var handlers = {

'LanguageIntent': function () {
  let uri = 'mongodb://my_uri';
  mongoose.connect(uri);
  let speechOutput;
  let db = mongoose.connection;
  db.on('error', console.error.bind(console, 'connection error:'));

  db.once('open', function callback() {
    console.log("I AM HERE");
  });
  console.log("Outside");
 }
}
exports.handler = function(event, context, callback){
  var alexa = Alexa.handler(event, context);
  alexa.registerHandlers(handlers);
  alexa.execute();
};

Насколько я понимаю, запросНЕ истекает время, и должна быть другая проблема, которую я не могу понять.Журнал облачных часов не показывает «Я ЗДЕСЬ».Но «Снаружи» записывается в журналы.Это заставляет меня думать, что при установлении соединения могут возникнуть некоторые проблемы.

Любая помощь в этом отношении будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

После недели отладки спринтов я нашел ответ на свою проблему.Мой код был в формате:

"use strict";
var Alexa = require("alexa-sdk");
const mongoose = require("mongoose");
var handlers = {
'LanguageIntent': function () {
  let uri = 'mongodb://my_uri';
  mongoose.connect(uri);
  let speechOutput;
  let db = mongoose.connection;
  db.on('error', console.error.bind(console, 'connection error:'));

  db.once('open', function callback() {
   console.log("I AM HERE");
  });
  console.log("Outside");
  this.response.speak("HI");
  this.emit(':responseReady');
}
exports.handler = function(event, context, callback){
  var alexa = Alexa.handler(event, context);
  alexa.registerHandlers(handlers);
  alexa.execute();
};

Я заметил, что как только я переместил свой код reponse.speak ВНУТРИ функции db.once, он начал работать без проблем.Следовательно, правильный способ структурировать код:

db.once('open', function callback() {
   this.response.speak("HI");
   this.emit(':responseReady');
});
0 голосов
/ 28 мая 2018

Согласно вашему общему коду, если сведения о соединении и все правильно, вы можете увеличить значение тайм-аута, потому что для первого установления соединения это может занять больше времени, чем обычный запрос.Это ни на что не влияет.Однажды это работает со мной.

...