let loopback = require('loopback'); let boot = require('loopback-boot'); let path = require('path'); let fs = require('fs'); let i18n = require('i18n'); module.exports = { loopback: loopback, boot: vnBoot }; function vnBoot(app, rootDir, rootModule) { // Internationalization let localeDir = `${__dirname}/../common/locale`; if (fs.existsSync(localeDir)) { i18n.configure({ directory: localeDir, defaultLocale: 'es' }); app.use(i18n.init); } // View let viewDir = `${rootDir}/../client`; if (fs.existsSync(viewDir)) { app.set('view engine', 'ejs'); app.set('views', viewDir); app.use(loopback.static(path.resolve(rootDir, '../client'))); } // Initialization app.start = function(port) { function onListen() { app.emit('started'); if (require.main === rootModule) { let packageJson = require(`${rootDir}/../package.json`); let appName = packageJson.name; let baseUrl = app.get('url').replace(/\/$/, ''); console.log(`Web server ${appName} listening at: %s`, baseUrl); } } let args = port ? [port, onListen] : [onListen]; return app.listen.apply(app, args); }; let config = require('./config.json'); for (let key in config) { app.set(key, config[key]); } let modelConfigFiles = [ `${__dirname}/model-config.json`, `${rootDir}/model-config.json` ]; let modelConfig = {}; for (file of modelConfigFiles) if (fs.existsSync(file)) Object.assign(modelConfig, require(file)); let bootOptions = { appRootDir: __dirname, appConfigRootDir: rootDir, modelsRootDir: rootDir, models: modelConfig, modelSources: [ `loopback/common/models`, `loopback/server/models`, `${__dirname}/../common/models`, `${rootDir}/../common/models` ], mixinDirs: [ `loopback/common/mixins`, `loopback/server/mixins`, `${__dirname}/../common/mixins`, `${rootDir}/../common/mixins` ], bootDirs: [ `${__dirname}/boot`, `${rootDir}/boot` ] }; boot(app, bootOptions, function(err) { if (err) throw err; if (require.main === rootModule) app.start(); }); }