Working on a NodeJS project, I came a across this very unexpected behaviour that I can't figure a way around - it seems like a bug to me, but perhaps I'm simply misunderstanding how NodeJS modules operate.
I've reduced it into a testcase as follows:
mod.js module
exports.process = function(obj) { obj.two = 'two'; };
test.js file
var testObj = {one: 'one'}; console.log(['Before:', testObj]); var cachedObj = testObj; require('./mod').process(cachedObj); console.log(['After:', testObj]);
Then running $ node test.js
gives me this:
[ 'Before:', { one: 'one' } ] [ 'After:', { one: 'one', two: 'two' } ]
I'm assigning the value of testObj
to cachedObj
, and testObj
is never being passed to the module method. testObj
should (as far as I can see) never be modified at all.
In fact, cachedObj
should surely never be modified either, as it is never returned from the mod.process
method. Where am I going wrong?
(running Node 0.6.9)