1

I haben MLab MongoDB und Mungo-Bibliothek wurde unter Verwendung einer DB-Verbindung innerhalb eines serverless (Lambda) -Prozedur zu erstellen. Es funktioniert reibungslos auf lokaler Maschine. Aber manchmal funktioniert es nach der Bereitstellung nicht. Die Anfrage gibt eine Internal server error zurück. Das Seltsame ist manchmal, dass es funktioniert. Aber wenn ich den Datenbankverbindungscode entferne, arbeitet der Handler. Das serverlose Protokoll sagt nur Process exited before completing request. Keine wirklichen Fehler, also keine Ahnung, was zu tun ist.Mongo Verbindung macht gelegentlich die Lambda-Funktion Timeout

Die DB-Verbindung sieht wie folgt aus: 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)); 

kein Fehler auch hier in. Irgendeine Idee was passiert?

+0

das Timeout erhöhen, röntgenstrahlVerfolgung hinzufügen, herauszufinden, welche etwas langsam ist. Dann, nachdem das Lambda warm ist, schaue erneut auf die Spur. –

+0

@TrentBartlem Noch hat nicht geholfen :-( – THpubs

Antwort

2

Wenn Sie Process exited before completing request erhalten, bedeutet dies, dass der Prozess node abgestürzt ist, bevor Lambda callback aufrufen konnte. Wenn Sie zu Cloudwatch-Protokollen gehen, gäbe es einen Fehler und eine Stack-Verfolgung von dem, was passiert ist.

Sie sollten eine Verbindung mit der MongoDB-Instanz in Ihrem Handler herstellen und bevor Sie callback() anrufen, zuerst die Verbindung trennen.

es so sein würde ...

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