2017-10-13 5 views
0

Die Idee unten macht die folgenden Lambda-Funktion ausführen, um einen Knotenmodul hatLambda-Funktion als node.js Modul

Node.js Server:

var express = require('express'); 
var app = express(); 

var server = require('http').Server(app); 
//var socketIoServer = require('socket.io')(server); 

server.listen(2006, function() { 
    console.log('Express server listening on port ' + 2006); 
}); 
require('./lambdaFunction/function').startLambdaFunction() 

Und die Lambda-Funktion i als Knoten gemacht haben Js-Modul ist als unten:

'use strict'; 
var MongoClient = require('mongodb').MongoClient; 

let atlas_connection_uri; 
let cachedDb = null; 

let firebase = require('firebase'); 

exports.handler= function(event, context,callback) 
{ 

    // var uri = process.env['MONGODB_ATLAS_CLUSTER_URI']; 
    var uri = "mongodb://163.172.131.83:28018/harmanconnectedcar"; 
    context.callbackWaitsForEmptyEventLoop = false; 
    firebase.initializeApp({ 
     serviceAccount: {}, 
     databaseURL: "https://harmanconnectedcar-180411.firebaseio.com/" 
    }); 


    var eventDataRef = firebase.database().ref('testTable'); 
    eventDataRef.on('child_changed', function(child,prev) { 
     console.log("*************inside fucntion**********************") 
     // all records after the last continue to invoke this function 

     var lastKey = Object.keys(child.val()).sort().reverse()[0]; 
     var eventDetectedData = child.val()[lastKey]; 
     console.log(eventDetectedData); 



    }); 

}; 


module.exports = {startLambdaFunction: exports.handler}; 

Das Modul exportiert ist aufrufen, aber ich den Fehler bekommen hat:

TypeError: Cannot set property 'callbackWaitsForEmptyEventLoop' of undefined 

Der Grund, warum ich so tue, ist Lambda-Funktion verlässt nach 30 Sekunden i Funktion soll für unbegrenzte Zeit zu laufen ich versuche nur, es zu tun

Durch einen node.js Server erstellen und die Berufung Lambda-Funktion als Modul

nur wenn geben Sie bitte einige Eingaben und Ideen zu erreichen, ich nur ein wenn auch völlig falsch sein könnte dabei bitte einige Eingabe

Antwort

0

Sie rufen Ihre Lambda-Funktion ohne Argumente geben. Wenn Sie es in dieser Zeile nennen:

require('./lambdaFunction/function').startLambdaFunction() 

müssen Sie einige Argumente in sie zu übergeben, die aussehen, was es bekommen würde, wenn es tatsächlich auf Lambda ausgeführt wurden.

require('./lambdaFunction/function').startLambdaFunction(event, context, callback) 
0

Ich kann nicht wirklich verstehen, was Sie versuchen, zu erreichen, aber hier ist, was falsch läuft.

Sie exportieren eine Funktion, die drei Parameter erfordert:

exports.handler= function(event, context, callback) 

Aber .. Sie den Aufruf der Funktion ohne Argumente verursacht Kontext werden nicht definiert, wenn Sie seine Eigenschaft callbackWaitsForEmptyEventLoop-false versuchen zu setzen.

context.callbackWaitsForEmptyEventLoop = false; 

Sie könnte entweder drei Argumente übergeben, wenn Sie die benötigen ./lambdaFunction/function

require('./lambdaFunction/function').startLambdaFunction() /*Pass three arguments here*/ 

.or Sie die Funktion ohne Parameter exportieren und lokal initialisieren.