arbabk arbabk - 2 months ago 4
Node.js Question

What does 'require('./app/routes.js')(app);' mean in this node server example?


// set up ======================================================================
var express = require('express');
var app = express(); // create our app w/ express
var mongoose = require('mongoose'); // mongoose for mongodb
var port = process.env.PORT || 8080; // set the port
var database = require('./config/database'); // load the database config
var morgan = require('morgan');
var bodyParser = require('body-parser');
var methodOverride = require('method-override');

// configuration ===============================================================
mongoose.connect(database.localUrl); // Connect to local MongoDB instance. A remoteUrl is also available (

app.use(express.static('./public')); // set the static files location /public/img will be /img for users
app.use(morgan('dev')); // log every request to the console
app.use(bodyParser.urlencoded({'extended': 'true'})); // parse application/x-www-form-urlencoded
app.use(bodyParser.json()); // parse application/json
app.use(bodyParser.json({type: 'application/vnd.api+json'})); // parse application/vnd.api+json as json
app.use(methodOverride('X-HTTP-Method-Override')); // override with the X-HTTP-Method-Override header in the request

// routes ======================================================================

// listen (start app with node server.js) ======================================
console.log("App listening on port " + port);

I understand a majority of this code. But I have never seen this:


I understand we are loading our routes but why are we passing (app) as if it is a function parameter? Why is this necessary and what would happen if I remove it?


It just means that require('./app/routes.js') returns a function. You can then call this function with another set of parantheses.

It's basically the same as:

var func = require('./app/routes.js');