2017-10-13 73 views
0

的想法如下使得下面lambda函數運行有一個節點模塊lambda函數作爲Node.js的模塊

的Node.js服務器:

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() 

而lambda函數我已經爲節點.js文件模塊如下:

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

導出的模塊調用,但我得到的錯誤有:

TypeError: Cannot set property 'callbackWaitsForEmptyEventLoop' of undefined 

的原因,我這樣做是lambda函數退出30秒後,我想運行無限時間的功能我只是想做到這一點

通過創建的node.js服務器和調用拉姆達功能模塊

僅有雖然請給一些投入和想法來完成我可能會做只是雖然完全錯了,請給一些輸入

回答

0

你調用不帶參數的lambda函數。當你把它在這條線:

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

你需要傳遞一些參數進去,看起來像它會得到,如果它實際上是在λ運行。

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

我無法真正掌握你想要完成的事情,但是這裏出了什麼問題。

要導出,需要三個參數的函數:

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

但是...你打電話而不會導致不確定的情境參數的功能,當您嘗試callbackWaitsForEmptyEventLoop設置其屬性爲false

context.callbackWaitsForEmptyEventLoop = false; 

你既可以傳遞三個參數,當你需要的./lambdaFunction/function

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

..或者你可以導出函數不帶參數並在本地初始化它們。