Why doesn't my Mongoose schema method "see" my required object?

I'm really confused about a variable scope issue with a file required via a path in a config file. Why does my Mongoose schema method "see" the required objects when called from within the model file but not when called from my app.js file? I'm convinced that I must be doing something obviously wrong but I can't see it.

The Node project has the following (simplified) structure:

|models
    -index.js
    -story.js
    -post.js
-app.js
-config.js

This is config.js:

config = {};

config.test = 'test';
config.models = __dirname + '/models';

module.exports = config;

This is story.js:

var config = require('../config.js');
var models = require(config.models);

var foo = {};
foo.bar = 'baz';

var storySchema = mongoose.Schema
({
    author: {type: mongoose.Schema.Types.ObjectId},
    root: {type: mongoose.Schema.Types.ObjectId, default: null}
});

storySchema.methods.test = function()
{
    console.log(foo.bar);
    console.log(config.test);
    console.log(models);
}

var Story = exports.model = mongoose.model('story', storySchema);

When I create a new Story in app.js and call its test() method, I get this output:

baz (so I know it's seeing objects in the same file)

test (so I know it's seeing variables in the config file)

{} (this "should" log my models object but it logs an empty object, why?)

When I create a new Story object within the story.js file, and run it (node ./models.story.js) the values returned are as expected (the models object is logged rather than an empty object).

Update, here are the index.js and app.js files:

index.js:

module.exports = {
    post: require('./post'),
    story: require('./story')
};

app.js:

var config = require('./config');
var models = require(config.models);
var story = new models.story.model();
story.test();

I believe the issue is that you've created a circular dependency. Story executes require(config.models) which requires Story again inside index.js.

Rather than storing a string and requireing it everywhere, try storing the models directly in config.models:

config.js

module.exports = {
  test: 'test',
  models: require(__dirname + '/models')
};

In case anyone runs into this same issue, I wanted to point to a couple resources I came across that helped me resolve the issue. As ssafejava pointed out, the problem does have to do with circular dependency (although ssafejava's solution did not entirely resolve the issue) . What worked for me was designing this dependency out of my application but there are other options if doing so is not possible. See the following issues' comments for a better explanation (in particular, see 'isaacs' comments):

https://github.com/joyent/node/issues/1490

https://github.com/joyent/node/issues/1418