2017-10-13 57 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*/ 

..或者你可以导出函数不带参数并在本地初始化它们。