Lambda函数作为node.js模块

时间:2017-10-13 06:31:56

标签: node.js firebase lambda module

下面的想法是使下面运行的lambda函数有一个节点模块

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

我作为node.js模块制作的lambda函数如下:

'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服务器并将lambda函数作为模块

调用

只是一个虽然请给出一些意见和想法来完成我可能完全错误做一个虽然请给一些输入

2 个答案:

答案 0 :(得分:0)

您在没有参数的情况下调用lambda函数。当您在此行中调用它时:

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

你需要传递一些参数,它们看起来就像它实际上在lambda上运行时会得到的。

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

答案 1 :(得分:0)

我无法真正掌握你想要完成的事情,但这里出了什么问题。

您正在导出需要三个参数的功能:

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

但是..当你试图将其属性callbackWaitsForEmptyEventLoop设置为false时,你正在调用没有参数的函数导致上下文未定义。

context.callbackWaitsForEmptyEventLoop = false;

当您需要./lambdaFunction/function

时,您可以传递三个参数
require('./lambdaFunction/function').startLambdaFunction() /*Pass three arguments here*/

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