 <p>So you have to remember that anonymous function calls in JavaScript are not assigned to anywhere. They are passed, and then lost. This is usually why we don't really have return statements in them. </p> <p><code>var x = function () { return y };</code> gives <code>x</code> the value of <code>y</code> but since there is never an assignment of the value of a callback, a return statement is meaningless. Callbacks, no matter if they have a return value, will not give you a value. They may feed that return value up to the function that they were given to, but they are entirely lost to you.</p> <p>The way to get around this is to do some trickery with the scope. Basically what you want to do is 'bump' the value you want to return up a scope you can assign and then return it there. For example, you can do this: </p> <pre><code>module.exports = function(req, res, db) { var stringToReturn; db.collection('projects').insert(req.body.project, function(err, docs) { if (err) throw err; stringToReturn = 'Project created.'; //I want to return this string. }); return stringToReturn; }; </code></pre> <p>This will work because the return value gets bound to module.exports, which is in turn bound to the result of</p> <pre><code>var create = require('./create'); console.log(create('something')) //should log 'Project created.' </code></pre>