Когда модуль загружен (другими словами, загрузить файл javascript с использованием require (..)), он возвращает все, что назначено для module.exports, например,
//javascript file add.js
module.exports = function(a,b){
return a+b;
}
//Usage in app.js
var add = require("add.js");
var result = add(2+2);//result would be 4
//Similarly
var result = require("add.js")(2+2);//result would be 4
В вашем случае database.js возвращает функцию в свой module.exports, и эта функция принимает один параметр, который является объектом.
var db = require(__dirname + '/components/database.js')({});
В приведенном выше фрагменте вы передаете пустой объект в функцию. Создатели database.js предоставили вам опции для настройки некоторых значений, например,
var db = require(__dirname + '/components/database.js')({
port:3306,
});
//or
var options = {};
options.port = 3306;
var Database = require(__dirname + '/components/database.js')
var db = Database(options);