nyx_server
Version:
Node内容发布
263 lines (225 loc) • 7.14 kB
JavaScript
/* global __dirname */
/* global process */
/* global global */
var log4js = require('log4js');
var express = require('express');
var fs = require('fs');
var path = require('path');
var contentStatis = require("./core/middleware/ContentStatic");
var paths = require('./core/utils/paths');
var bodyParser = require('body-parser');
var collector = require("./metrics/Collector");
var ejs = require('ejs');
var Promise = require("bluebird");
var session = require('express-session');
var uuid = require('node-uuid');
Promise.config({
// Enable warnings.
warnings: {
//wForgottenReturn: true
},
// Enable long stack traces.
longStackTraces: true,
// Enable cancellation.
cancellation: true
});
//系统配置
var defaultConfig = require("./config/default-config"); //系统默认配置
global.nxyConfig = {
isUI: defaultConfig.isUI,
isDev: defaultConfig.isDev,
isDebug: defaultConfig.isDebug,
workDir: defaultConfig.workDir,
projects_cache_path: paths.projects_cache,
chips_cache_path: paths.chips_cache,
ejs_delimiter: "?",
noeditAttr: "notedit",
nodeidAttr: "nodeid"
};
var ConnectionPools = require("./db/ConnectionPools");
var pools = new ConnectionPools(500);
pools.start();
global.pools = pools;
pools.initProject({
name: "nyx",
basePath: path.join(__dirname, ".")
});
collector.start();
global.projectManager = require('./core/api/project');
var template = require('./router/template'); //模板处理
var chip = require('./router/chip'); //碎片处理
var project = require("./router/project"); //项目处理
var columns = require("./router/columns"); //栏目管理
var users = require("./router/users"); //用户管理
var clearCache = require("./core/utils/ClearNodeRequireCache");
var Authencation = require("./core/middleware/Authencation");
var app = express();
if (global.nxyConfig.isDev) {
app.use(session({
genid: function (req) {
return uuid.v1(); // Generate a v1 (time-based) id
},
secret: 'keyboard cat',
name: "nyx.sid",
rolling: true,
saveUninitialized: false,
cookie: { maxAge: 8 * 60 * 60 * 1000 }
}));
} else {
var RedisStore = require('connect-redis')(session);
var redisStoreOptions = {
host: "nyx.redis.ifeng.com",
port: 7000
};
app.use(session({
store: new RedisStore(redisStoreOptions),
genid: function (req) {
return uuid.v1(); // Generate a v1 (time-based) id
},
rolling: true,
saveUninitialized: false,
secret: 'keyboard cat',
name: "nyx.sid",
cookie: { maxAge: 8 * 60 * 60 * 1000 }
}));
}
app.use(log4js.connectLogger(log4js.getLogger("http"), { level: 'auto' }));
//app.use(bodyParser.json());
//app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json({ limit: "20mb" }));
app.use(bodyParser.urlencoded({ extended: true, limit: "20mb" }));
if (global.nxyConfig.isUI) {
/*********webpackbegin*********/
var path = require('path');
var fs = require('fs');
var webpack = require('webpack');
var webpackMiddleware = require('webpack-dev-middleware');
var webpackHotMiddleware = require('webpack-hot-middleware');
var config = require('./webpack.config.js');
const compiler = webpack(config);
const middleware = webpackMiddleware(compiler, {
publicPath: config.output.publicPath,
contentBase: 'src',
stats: {
colors: true,
hash: false,
timings: true,
chunks: false,
chunkModules: false,
modules: false
}
});
app.use(middleware);
app.use(webpackHotMiddleware(compiler));
app.use('/manage', function response(req, res, next) {
fs.writeFileSync(path.join(__dirname, 'ui/temp/index.ejs'),
middleware.fileSystem.readFileSync(path.join(__dirname, 'ui/dist/index.html')), 'utf8');
next();
});
/********webpackend**********/
}
app.use(express.static(__dirname + '/ui')); //设置静态资源的根目录
var authPathFilter = function (path) {
if (path == "/auth/login" || path == "/") {
return true;
}
return false;
};
/**用户认证 */
var auth = Authencation({ loginurl: "/manage/login", filter: authPathFilter });
app.use(auth);
/** nyx上下文环境 */
var nyxContext = require("./core/middleware/RequestContext");
app.use(nyxContext());
// if (!global.nxyConfig.isDev) {
// var requestMonitor = require("./core/middleware/RequestMonitor");
// app.use(requestMonitor());
// }
if (global.nxyConfig.isDev) {
var liveload = require("./core/middleware/Liveload");
app.use('/template', function (req, res, next) {
function _next() {
template(req, res, next);
}
liveload(req, res, _next);
}); //模板处理
app.use('/chip', function (req, res, next) {
function _next() {
chip(req, res, next);
}
liveload(req, res, _next);
});
app.use('/project', function (req, res, next) {
function _next() {
project(req, res, next);
}
liveload(req, res, _next);
});
app.use('/users', function (req, res, next) {
function _next() {
users(req, res, next);
}
liveload(req, res, _next);
});
app.use('/columns', function (req, res, next) {
function _next() {
columns(req, res, next);
}
liveload(req, res, _next);
});
} else {
app.use('/template', template);
app.use('/chip', chip);
app.use('/project', project);
app.use('/users', users); //用户管理
app.use('/columns', columns); //栏目管理
}
app.use('/resources', function (req, res, next) {
function fn1(workDir) {
var st = contentStatis(workDir, function (originalUrl) {
return originalUrl.replace("/resources/", "");
}, { fallthrough: false });
return st;
}
function _next(error) {
if (paths.projects_cache != defaultConfig.workDir && error && error.statusCode == 404) {
var st = fn1(paths.projects_cache);
st(req, res, next);
} else {
next(error);
}
}
var st = fn1(defaultConfig.workDir);
st(req, res, _next);
}
);
// if(!global.nxyConfig.isDev){
// app.use('/dump' , function(req,res,next){
// var heapdump = require('heapdump');
// heapdump.writeSnapshot(path.join(__dirname, Date.now() + '.heapsnapshot'));
// res.end("dump success");
// });
// }
var manage = require('./router/manage'); //管理
var manageapi = require('./router/manageapi');
var authrouter = require("./router/auth");
app.use("/auth", authrouter);
app.use("/manageapi", manageapi);
app.use('/manage', manage);
app.set('view engine', 'ejs');
module.exports = app;
//require('monitor').start(); 暂时不打开
process.on('uncaughtException', function (err) {
//打印出错误
console.log(new Date(), err);
//打印出错误的调用栈方便调试
console.log(err.stack);
});
if (!module.parent) {
app.set('port', process.env.PORT || 9100);
var server = app.listen(app.get('port'), function () {
console.log('Express server listening on port ', server.address().port, " with pid ", process.pid);
var log = log4js.getLogger('startup');
log.info('Express server listening on port ', server.address().port, " with pid ", process.pid);
});
}