arbabk arbabk - 3 months ago 10
Node.js Question

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

Server.js

// 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 (modulus.io)

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 ======================================================================
require('./app/routes.js')(app);

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


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

require('./app/routes.js')(app);

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?

Answer

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');
func(app);