Modules

This is a common trick question that appears in the exams.

Exporting a plain object

// Exporting a plain object. // Any code that `requires` this will share the same object. module.exports = { name: 'Kevin', age: 42 }
// Also valid, equivalent to above module.exports.name = 'Kevin' module.exports.age = 42

Exporting a function that returns an object

// Exporting a function that returns an object // Any code that `requires` and calls this will // get a NEW object every time. module.exports = function () { return { name: 'Kevin', age: 42 } } // Also watch out with this one, you need to require it like this: var foo1 = require('foo')() console.log(foo1.name) // prints 'Kevin' // This is NOT valid and will return a function instead of an object var foo2 = require('foo') console.log(foo2.name) // undefined!