Reputation: 11064
I have 2 different node scripts... save_info.js
imports openConections array
from sse_server.js
. And, sse_server.js
imports function broadcast
from save_info.js
.
However, this is causing openConnections array
to be undefined
inside of save_info.js
. Why is this and how can I fix this?
save_info.js:
var openConnections = require('../scripts/sse_server.js').openConnections;
function broadcast(result, event, httpObject) {
var result = JSON.stringify(result);
var date = new Date().getMilliseconds();
httpObject.write('id: ' + date + '\n');
httpObject.write('data: { \"' + event + '\":\n');
httpObject.write('data:' + result + '\n');
httpObject.write('data: }' + '\n\n');
}
function db_finish(err, product, numberAffected,
result, event) {
if (err) { console.log(err) }
else {
console.log("Db insert successfull");
openConnections.forEach(function(httpObject) {
broadcast(result, event, httpObject);
});
}
console.log("Numer effected " + numberAffected);
}
module.exports.openConnections = openConnections;
sse_server.js:
var broadcast = require("../data/save_info").broadcast;
var openConnections = [];
for (var model in models){
models[model].find({}).sort({_id: -1}).limit(1).exec(
function (err, result){
broadcast(result, model, res);
});
}
module.exports.broadcast = broadcast;
Upvotes: 0
Views: 87
Reputation: 5074
To prevent circular dependency, nodejs module loader stops loading sse_server module in save_info.js That's why openConnections is undefined. To resolve this, do the following:
1) Move broadcast() out into a separate module (broadcast.js for example).
2) put require('../data/broadcast.js') in both sse_server.js and save_info.js
3) Remove require('../data/save_info') in sse_server.js
Upvotes: 1