UNPKG

nyx_server

Version:

Node内容发布

263 lines (225 loc) 7.14 kB
/* 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); }); }