97 lines
1.7 KiB
JavaScript
97 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
const Fs = require('fs');
|
|
const Hapi = require('hapi');
|
|
const Inert = require('inert');
|
|
const Path = require('path');
|
|
const PortalApi = require('portal-api');
|
|
const Template = require('lodash.template');
|
|
const Understood = require('understood');
|
|
|
|
const index = Path.join(__dirname, './index.html');
|
|
const html = Template(Fs.readFileSync(index, 'utf-8'));
|
|
|
|
const server = new Hapi.Server({
|
|
connections: {
|
|
routes: {
|
|
files: {
|
|
relativeTo: Path.join(__dirname, '../static')
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
server.connection({
|
|
port: process.env.PORT || 8000
|
|
});
|
|
|
|
const plugins = [
|
|
Inert,
|
|
{
|
|
register: Understood,
|
|
options: {
|
|
default: 'en-us',
|
|
localesDir: Path.join(__dirname, '../static/locales')
|
|
}
|
|
},
|
|
{
|
|
register: PortalApi,
|
|
routes: { prefix: '/api' }
|
|
}
|
|
];
|
|
|
|
const defaultHandler = (request, reply) => {
|
|
const locales = (request.locale || '').toLowerCase().split(/\-/);
|
|
|
|
reply(html({
|
|
locale: request.locale,
|
|
lang: locales[0]
|
|
}));
|
|
};
|
|
|
|
server.register(plugins, (err) => {
|
|
if (err) {
|
|
console.error(err);
|
|
process.exit(1);
|
|
}
|
|
|
|
server.route({
|
|
method: 'GET',
|
|
path: '/static/images/{param*}',
|
|
handler: {
|
|
directory: {
|
|
path: './images/',
|
|
redirectToSlash: true,
|
|
index: false
|
|
}
|
|
}
|
|
});
|
|
|
|
server.route({
|
|
method: 'GET',
|
|
path: '/static/{param*}',
|
|
handler: {
|
|
directory: {
|
|
path: '.',
|
|
redirectToSlash: true,
|
|
index: false
|
|
}
|
|
}
|
|
});
|
|
|
|
server.route({
|
|
method: '*',
|
|
path: '/{param*}',
|
|
handler: defaultHandler
|
|
});
|
|
|
|
server.start((err) => {
|
|
if (err) {
|
|
console.error(err);
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`Server running at: http://localhost:${server.info.port}`);
|
|
});
|
|
});
|