При разделении кода на пользовательский модуль в Nodejs при попытке передать переменную в другой модуль его получают неопределенным - PullRequest
0 голосов
/ 04 января 2019

У меня есть лямбда-aws, которую я использую для отключения облачных часов AWS. Это прекрасно работает, когда я не использую пользовательские модули, когда я пытался использовать пользовательские модули, я получаю неопределенное значение для переменной, которая мне нужна в другом модуле. Что я делаю не так? var myRuleparams теперь не определен Я не поместил весь код просто фрагмент, чтобы было легко понять

вот index.js, который работает

let AWS = require("aws-sdk");
const cloudwatchevents = new AWS.CloudWatchEvents({region: 'us-east-1'});
//var cloudrule = require('./cloudrule');

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

let myRule;
const er = event.resources ;

//miRule is the name of the CloudWatchEventRule that started the lambda
 myRule = er[0].slice(43);
 var myRuleparams = { Name: myRule };
 var rulePromise = cloudwatchevents.disableRule(myRuleparams).promise();
                                      rulePromise.then(
                                        function(data) {
                                         console.log("cloudwatchevent has been disabled");
                                          console.log(data);
                                        }).catch(
                                          function(err) {
                                          console.error(err);
                                          //this works 

                                          // more code

вот index.js с пользовательским модулем cloudrule.js, который не работает

index.js

let AWS = require("aws-sdk");
const cloudwatchevents = new AWS.CloudWatchEvents({region: 'us-east-1'});
var cloudrule = require('./cloudrule');

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

let myRule;
const er = event.resources;
//miRule is the name of the CloudWatchEventRule that started the lambda
myRule = er[0].slice(43);
var myRuleparams = { Name: myRule };

// here under custom module with functions and passing Variable myRuleparams
cloudrule.disableCloudWatchRuler(myRuleparams);

//more code

вот это cloudrule.js

let AWS = require("aws-sdk");
const cloudwatchevents = new AWS.CloudWatchEvents({region: 'us-east-1'});

module.exports = {

disableCloudWatchRuler: function(myRuleparams) {

                        var rulePromise = cloudwatchevents.disableRule(myRuleparams).promise();
                                      rulePromise.then(
                                        function(data) {
                                         console.log("cloudwatchevent has been disabled");
                                          console.log(data);
                                        }).catch(
                                          function(err) {
                                          console.error(err);
                                        });
                                    }
                                };

1 Ответ

0 голосов
/ 04 января 2019

я исправил это нужно поставить пусть myRule; перед экспортом модуля сделать его глобальной переменной

код должен выглядеть следующим образом

let AWS = require("aws-sdk");
const cloudwatchevents = new AWS.CloudWatchEvents({region: 'us-east-1'});
var cloudrule = require('./cloudrule');
 //add let myRule here
let myRule;

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

//remove let myRulefrom here

const er = event.resources;
 // more code
...