无法从 AWS Lambda 连接到 MongoDB

Not being able to connect to MongoDB from AWS Lambda

我正在尝试建立一个 alexa 技能,在请求时连接到 mlab。我在我的代码中放置了多个 console.log() 消息,并观察到 ​​

中的控制台

db.once('open', function callback() { console.log('a');}) is not getting executed.

在查找 CloudWatch 日志时,我收到此消息:

REPORT RequestId: 1b57c8f8-61b6-11e8-9038-5fc7c131d222 Duration: 40.54 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 51 MB

我使用了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();
};

据我了解,请求没有超时,一定有其他我无法理解的问题。 cloudwatch 日志不显示 "I AM HERE"。但是 "Outside" 被记录在日志中。这让我觉得建立连接时一定有问题。

在这方面的任何帮助将不胜感激!

根据您共享的代码,如果连接详细信息和一切都正确,那么您可以通过增加超时值来实现,因为第一次建立连接可能需要比通常查询更长的时间。它不影响任何东西。一旦它与我一起工作。

经过一周的调试冲刺,我找到了问题的答案。我的代码格式为:

"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');
});