Skip to content

Commit

Permalink
Конфиг приложения применяется через _.defaults
Browse files Browse the repository at this point in the history
  • Loading branch information
klimashkin committed Dec 26, 2013
1 parent fc26794 commit 5c5f4a2
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 26 deletions.
46 changes: 25 additions & 21 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ var express = require('express'),
os = require('os'),
log4js = require('log4js'),
argv = require('optimist').argv,
_ = require('lodash'),

mkdirp = require('mkdirp'),
mongoose = require('mongoose'),
Expand Down Expand Up @@ -45,31 +46,34 @@ for (var k in interfaces) {


var pkg = JSON.parse(fs.readFileSync(__dirname + '/package.json', 'utf8')),
conf = JSON.parse(JSON.minify(fs.readFileSync(argv.conf || __dirname + '/config.json', 'utf8'))),

land = argv.land || conf.land || 'dev', //Окружение (dev, test, prod)
listenport = argv.port || conf.port || 3000, //Порт прослушки сервера
listenhost = argv.hostname || conf.hostname || undefined, //Слушать хост

protocol = argv.protocol || conf.protocol || 'http', //Протокол сервера для клинетов
domain = argv.domain || conf.domain || addresses[0] || '127.0.0.1', //Адрес сервера для клинетов
port = argv.projectport || conf.projectport || '', //Порт сервера для клиента
uport = argv.projectuport || conf.projectuport || '', //Порт сервера загрузки фотографий для клиента
confDefault = JSON.parse(JSON.minify(fs.readFileSync(__dirname + '/config.json', 'utf8'))),
confConsole = _.pick(argv, Object.keys(confDefault)),
conf = _.defaults(confConsole, argv.conf ? JSON.parse(JSON.minify(fs.readFileSync(argv.conf, 'utf8'))) : {}, confDefault),

land = conf.land, //Окружение (dev, test, prod)
listenport = conf.port, //Порт прослушки сервера
listenhost = conf.hostname, //Слушать хост

protocol = conf.protocol, //Протокол сервера для клинетов
domain = conf.domain || addresses[0], //Адрес сервера для клинетов
port = conf.projectport, //Порт сервера для клиента
uport = conf.projectuport, //Порт сервера загрузки фотографий для клиента
host = domain + port, //Имя хоста (адрес+порт)
subdomains = (argv.subdomains || conf.subdomains || '').split('_').filter(function (item) {

subdomains = (argv.subdomains || conf.subdomains).split('_').filter(function (item) {
return typeof item === 'string' && item.length > 0;
}), //Поддомены для раздачи статики из store
moongoUri = argv.mongo || conf.mongo.con,
moongoPool = argv.mongopool || conf.mongo.pool || 5,
moongoPool = argv.mongopool || conf.mongo.pool,
mail = conf.mail || {},

buildJson = land === 'dev' ? {} : JSON.parse(fs.readFileSync(__dirname + '/build.json', 'utf8')),
storePath = path.normalize(argv.storePath || conf.storePath || (__dirname + "/../store/")), //Путь к папке хранилища
noServePublic = argv.noServePublic || conf.noServePublic || false, //Флаг, что node не должен раздавать статику скриптов
noServeStore = argv.noServeStore || conf.noServeStore || false, //Флаг, что node не должен раздавать статику хранилища
storePath = path.normalize(conf.storePath || (__dirname + "/../store/")), //Путь к папке хранилища
servePublic = conf.servePublic, //Флаг, что node должен раздавать статику скриптов
serveStore = conf.serveStore, //Флаг, что node должен раздавать статику хранилища

logPath = path.normalize(argv.logPath || conf.logPath || (__dirname + "/logs")), //Путь к папке логов
manualGarbageCollect = argv.manualGarbageCollect || conf.manualGarbageCollect || 0; //Интервал самостоятельного вызова gc
logPath = path.normalize(conf.logPath || (__dirname + "/logs")), //Путь к папке логов
manualGarbageCollect = conf.manualGarbageCollect; //Интервал самостоятельного вызова gc. 0 - выключено


/**
Expand Down Expand Up @@ -180,23 +184,23 @@ async.waterfall([
app.use('/style', require('less-middleware')({src: __dirname + pub + 'style', force: true, once: false, compress: false, debug: false}));
//prod: app.use('/style', require('less-middleware')({src: __dirname + pub + '/style', force: false, once: true, compress: true, yuicompress: true, optimization: 2, debug: false}));
}
if (!noServePublic) {
if (servePublic) {
app.use(express.static(__dirname + pub, {maxAge: ms('2d')}));
}
if (!noServeStore) {
if (serveStore) {
app.use('/_a/', express.static(storePath + 'public/avatars/', {maxAge: ms('2d')}));
app.use('/_p/', express.static(storePath + 'public/photos/', {maxAge: ms('7d')}));
}
app.use(app.router); //Здесь будут распологаться наши обработчики путей (app.get, post etc.)

//app.get должен быть всегда после app.use, в противном случае следующие app.use не будет использованы
//Сначала "законцовываем" пути к статике
if (!noServePublic) {
if (servePublic) {
app.get('/img/*', static404);
app.get('/js/*', static404);
app.get('/style/*', static404);
}
if (!noServeStore) {
if (serveStore) {
app.get('/_a/d/*', function (req, res) {
res.redirect(302, '/img/caps/avatar.png');
});
Expand Down
10 changes: 5 additions & 5 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@
"uport": 3001, /* Application uploader.js will listen this port. @Default 3001 */

"protocol": "http", /* Protocol for external users. @Default "http" */
"domain": "", /* Domain for external users, i.e. site entry point. @Default "127.0.0.1" */
"domain": "127.0.0.1", /* Domain for external users, i.e. site entry point. @Default "127.0.0.1" */
"projectport": "", /* Port for external users. @Example ":1234". @Default "" */
"projectuport": ":3001", /* Upload files port for external users. @Example ":1234". @Default "" */

"storePath": "", /* Store folder with static user content (avatars, photos, etc). @Default "/../store/" */
"noServePublic": false, /* Tell app.js not to serve out its public folder (js, css, etc). @Default false */
"noServeStore": false, /* Tell app.js not to serve out store public folder. @Default false */
"storePath": "", /* Store folder with static user content (avatars, photos, etc). @Default "../store/" */
"servePublic": true, /* Tell app.js serve out its public folder (js, css, etc). @Default true */
"serveStore": true, /* Tell app.js serve out store public folder. @Default true */
"subdomains": "", /* Subdomains for serving store path's public folder divided by _. @Default "" */

"logPath": "", /* Folder for logs. @Default "./logss" */
"logPath": "", /* Folder for logs. @Default "./logs" */
"manualGarbageCollect": 0, /* Manual invoke garbage collector in millisec.
WARN: need to use with node flags --nouse-idle-notification --expose-gc
If 0 - no manual collect. @Default 0 */
Expand Down

0 comments on commit 5c5f4a2

Please sign in to comment.