From 5c5f4a296bc0d9a5269ce688303f93ead88ebde1 Mon Sep 17 00:00:00 2001 From: klimashkin Date: Thu, 26 Dec 2013 07:18:22 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D1=8F=D0=B5=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=5F.defaults?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 46 +++++++++++++++++++++++++--------------------- config.json | 10 +++++----- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/app.js b/app.js index 809b38d3f..e93852fed 100755 --- a/app.js +++ b/app.js @@ -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'), @@ -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 - выключено /** @@ -180,10 +184,10 @@ 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')})); } @@ -191,12 +195,12 @@ async.waterfall([ //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'); }); diff --git a/config.json b/config.json index e73bce52a..d72bb89e6 100644 --- a/config.json +++ b/config.json @@ -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 */