salix/services/loopback/server/server.js

150 lines
3.8 KiB
JavaScript
Raw Normal View History

let loopback = require('loopback');
let boot = require('loopback-boot');
let DataSource = require('loopback-datasource-juggler').DataSource;
let fs = require('fs-extra');
let i18n = require('i18n');
let path = require('path');
const loopbackConnector = require('loopback-connector');
2017-10-13 14:22:45 +00:00
let _resolveConnector = DataSource._resolveConnector;
DataSource._resolveConnector = function(name) {
let testPath = `${__dirname}/connectors/${name}.js`;
2018-12-17 10:28:39 +00:00
if (fs.existsSync(testPath)) {
return {
connector: require(testPath),
error: null
};
2018-12-17 10:28:39 +00:00
}
return _resolveConnector.apply(this, arguments);
};
2017-10-13 14:54:07 +00:00
module.exports = {
loopback: loopback,
loopbackConnector: loopbackConnector,
2017-10-13 14:54:07 +00:00
boot: vnBoot
};
2017-10-13 14:22:45 +00:00
2017-11-16 11:35:07 +00:00
function vnBoot(app, rootDir, rootModule) {
2017-10-13 14:22:45 +00:00
// Internationalization
let localeDir = `${__dirname}/../common/locale`;
2017-10-13 14:22:45 +00:00
if (fs.existsSync(localeDir)) {
2017-10-13 14:22:45 +00:00
i18n.configure({
directory: localeDir,
2017-10-13 14:22:45 +00:00
defaultLocale: 'es'
});
app.use(i18n.init);
2017-10-13 14:22:45 +00:00
}
2017-10-13 14:54:07 +00:00
// View
2018-02-14 11:52:24 +00:00
let wpAssets;
2018-01-31 12:40:26 +00:00
let viewDir = `${rootDir}/../client`;
2017-10-13 14:54:07 +00:00
if (fs.existsSync(viewDir)) {
app.set('view engine', 'ejs');
app.set('views', viewDir);
app.use(loopback.static(path.resolve(rootDir, '../client')));
}
const buildVersion = new Date().getTime();
2018-02-14 11:52:24 +00:00
app.renderIndex = async res => {
let assetsDirs = [viewDir, `${__dirname}/../../../dist`];
for (let assetsDir of assetsDirs) {
let wpAssetsFile = `${assetsDir}/webpack-assets.json`;
if (fs.existsSync(wpAssetsFile)) {
wpAssets = require(wpAssetsFile);
break;
}
}
2018-02-14 11:52:24 +00:00
res.render(`${viewDir}/index.ejs`, {
assets: assets,
version: buildVersion
2018-02-14 11:52:24 +00:00
});
function assets(entryPoint) {
let jsFiles = [];
let regex = new RegExp(`(^|~)${entryPoint}($|~)`);
2018-02-14 11:52:24 +00:00
for (let asset in wpAssets) {
if (regex.test(asset))
jsFiles.push(wpAssets[asset].js);
2018-02-14 11:52:24 +00:00
}
return jsFiles;
}
};
2017-10-13 14:22:45 +00:00
// Initialization
2018-02-14 11:52:24 +00:00
app.start = port => {
function onListen() {
2017-10-13 14:22:45 +00:00
app.emit('started');
2018-02-14 11:52:24 +00:00
let packageJson = require(`${rootDir}/../package.json`);
let appName = packageJson.name;
let baseUrl = app.get('url').replace(/\/$/, '');
2018-05-31 05:59:42 +00:00
console.log(`Web server ${appName} listening at: %s`, `${baseUrl}/explorer`);
}
let args = port ? [port, onListen] : [onListen];
return app.listen(...args);
2017-10-13 14:22:45 +00:00
};
let config = require('./config.json');
2018-12-17 10:28:39 +00:00
for (let key in config)
2017-10-13 14:22:45 +00:00
app.set(key, config[key]);
let modelConfigFiles = [
`${__dirname}/model-config.json`,
`${rootDir}/model-config.json`
];
let modelConfig = {};
2018-12-17 10:28:39 +00:00
for (file of modelConfigFiles) {
if (fs.existsSync(file))
Object.assign(modelConfig, require(file));
2018-12-17 10:28:39 +00:00
}
let bootOptions = {
2017-10-13 14:22:45 +00:00
appRootDir: __dirname,
appConfigRootDir: rootDir,
modelsRootDir: rootDir,
models: modelConfig,
2017-10-13 14:22:45 +00:00
modelSources: [
`loopback/common/models`,
`loopback/server/models`,
`${__dirname}/../common/models`,
`${rootDir}/../common/models`
2017-10-13 14:22:45 +00:00
],
mixinDirs: [
`loopback/common/mixins`,
`loopback/server/mixins`,
`${__dirname}/../common/mixins`,
`${rootDir}/../common/mixins`
2017-10-13 14:22:45 +00:00
],
bootDirs: [
`${__dirname}/boot`,
`${rootDir}/boot`
2017-10-13 14:22:45 +00:00
]
};
2018-12-17 10:28:39 +00:00
if (fs.existsSync(`/config`))
bootOptions.dsRootDir = `/config`;
2017-10-13 14:22:45 +00:00
boot(app, bootOptions, function(err) {
if (err) throw err;
2017-11-16 11:35:07 +00:00
if (require.main === rootModule)
2017-10-13 14:22:45 +00:00
app.start();
2017-10-13 14:54:07 +00:00
});
}