Извините, если это основной вопрос. Я нашел информацию о создании модулей, но havent много узнал об области переменных при использовании модулей.Область переменной с использованием модулей в nodejs
Когда я первоначально написал свою программу, она была написана в виде единого документа
var mongodb = require('mongodb');
var server = new mongodb.Server("192.168.199.10", 27017, {});
new mongodb.Db('syslog', server, {}).open(function (error, client) {
if (error) throw error;
var collection = new mongodb.Collection(client, 'messages');
collection.distinct("JUNOS.SRC.IP", function(err, results) {
var sessionCounts = [];
function parseSessionCounts(hosts, callback) {
var loop = 1,
numLoop = hosts.length;
hosts.forEach(function(element){
collection.find({"JUNOS.SRC.IP": element, "JUNOS.ACTION":'closed'}).count(function(err,count){
if (loop++ < numLoop){
sessionCounts.push({host:element,count:count});
} else {
sessionCounts.push({host:element,count:count});
callback();
}
})
});
}
parseSessionCounts(results, function() {
console.log(sessionCounts);
client.close();
});
})
});
Чтобы сделать свой код для повторного использования, я вспыхнул функцию parseSessionCount в модуль:
sessionCount.js
var sessionjs = require('./session'),
mongodb = require('mongodb'),
server = new mongodb.Server("192.168.199.10", 27017, {});
new mongodb.Db('syslog', server, {}).open(function (error, client) {
if (error) throw error;
var collection = new mongodb.Collection(client, 'messages');
collection.distinct("JUNOS.SRC.IP", function(err, results) {
var sessionCounts = [];
sessionjs.parseSessionCounts(results, collection, sessionCounts, function() {
console.log(sessionCounts);
client.close();
});
})
});
и session.js
module.exports = {
parseSessionCounts: function (hosts, collection, sessionCounts, callback) {
var loop = 1,
numLoop = hosts.length;
hosts.forEach(function(element){
collection.find({"JUNOS.SRC.IP": element, "JUNOS.ACTION":'closed'}).count(function(err,count){
if (loop++ < numLoop){
sessionCounts.push({host:element,count:count});
} else {
sessionCounts.push({host:element,count:count});
callback();
}
})
});
}
}
При внесении этого изменения я заметил, что мне пришлось передать переменные (коллекции и sessionCounts) в функцию, хотя вызовы функций все еще находятся в пределах определения переменной. Есть ли другой способ сделать это, не передавая переменные, или это всегда будет необходимо, поскольку это модуль, который определен за пределами области действия определенных переменных?