app.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. const express = require('express');
  2. const path = require('path');
  3. const favicon = require('serve-favicon');
  4. const logger = require('morgan');
  5. const bodyParser = require('body-parser');
  6. const serveStatic = require('serve-static');
  7. const session = require('express-session');
  8. const cookieParser = require('cookie-parser');
  9. const RedisStore = require('connect-redis')(session);
  10. const app = express();
  11. // view engine setup
  12. app.set('views', path.join(__dirname, 'views'));
  13. app.set('view engine', 'jade');
  14. // uncomment after placing your favicon in /public
  15. //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  16. app.disable('etag');
  17. // app.use(logger('dev'));
  18. app.use(bodyParser.json());
  19. app.use(bodyParser.urlencoded({extended: false}));
  20. app.use(express.static(path.join(__dirname, 'public')));
  21. //app.use(express.static(path.join(__dirname, 'node_modules')));
  22. app.use(serveStatic('bower_components'));
  23. app.use(cookieParser('fy_'));
  24. // app.use(session({
  25. // secret: 'felix yin',
  26. // name: 'LrsGame', //这里的name值得是cookie的name,默认cookie的name是:connect.sid
  27. // cookie: {maxAge: 60000 * 300}, //设置maxAge是80000ms,即80s后session和相应的cookie失效过期
  28. // resave: true,
  29. // saveUninitialized: true
  30. // }));
  31. app.use(session({
  32. name: 'sid',
  33. secret: 'sysm-felix-',
  34. resave: true,
  35. rolling: true,
  36. saveUninitialized: true,
  37. cookie: {maxAge: 60000 * 3000},
  38. store: new RedisStore({
  39. // "host": "redis",
  40. "host": "qtrj.i234.me",
  41. // "host": "localhost",
  42. "port": "6380",
  43. // "pass": "123456",
  44. "db": 4,
  45. "ttl": 1800,
  46. "logErrors": true
  47. })
  48. }));
  49. app.use(function (req, res, next) {
  50. let url = req.originalUrl;
  51. if (url !== "/login" && url !== "/sessionLess" && url !== "/" && !req.session.username) {
  52. return res.redirect("/sessionLess");
  53. }
  54. next();
  55. });
  56. app.use(function (req, res, next) {
  57. res.locals.userid = req.session.userid || null;
  58. res.locals.auth = req.session.auth || null;
  59. res.locals.username = req.session.username || null;
  60. //res.locals.menus = req.session.menus || null;
  61. next();
  62. });
  63. // =================================================================================
  64. //注册登陆等
  65. let index = require('./routes/index');
  66. app.use('/', index);
  67. //标签接收管理模块
  68. app.use('/dna/receive', require('./routes/dna/receive'));
  69. //DNA提取管理模块
  70. app.use('/dna/extract', require('./routes/dna/extract'));
  71. //建库管理
  72. app.use('/dna/storage', require('./routes/dna/storage'));
  73. //上机管理
  74. app.use('/dna/operate', require('./routes/dna/operate'));
  75. //分析报告管理
  76. app.use('/dna/report', require('./routes/dna/report'));
  77. //超级管理
  78. app.use('/dna/admin', require('./routes/dna/admin'));
  79. //重做模块
  80. app.use('/dna/redo', require('./routes/dna/redo'));
  81. //用户管理模块
  82. let user = require('./routes/user');
  83. app.use('/user', user);
  84. //基本设置
  85. let settings = require('./routes/settings/index');
  86. app.use('/settings', settings);
  87. //关于模块
  88. let about = require('./routes/about');
  89. app.use('/about', about);
  90. //公共模块
  91. let common = require('./routes/common');
  92. app.use('/common', common);
  93. //自动注册所有service为rpc服务
  94. let rpc = require('./lib/rpc');
  95. let dirWalk = require('./lib/myfs/digui');
  96. let _s = require('underscore.string');
  97. let serviceFileFolder = __dirname + '/service';
  98. let serviceFileList = dirWalk.syncWalk(serviceFileFolder, 0);
  99. // console.info('页面需引入RPC注册的服务地址是: ');
  100. let rpcScripts = serviceFileList.map(function (o) {
  101. let service = require('.' + o.rpcPath),
  102. ret = o.rpcPath.split('/'),
  103. clientName = _s.capitalize(ret[ret.length - 2]) + _s.capitalize(ret[ret.length - 1].replace('.js', '')),
  104. script = ['script(src=\'', o.rpcPath, '/helper.js', '\')\n', "script var ", clientName, " = new ", clientName, "('", o.rpcPath, "');\n"].join('');
  105. app.use(o.rpcPath, rpc(express, '/helper.js', clientName, service));
  106. // console.log(script);
  107. return script;
  108. });
  109. let fs = require('fs');
  110. let rpcJadePath = __dirname + '/views/include/rpc.jade';
  111. try {
  112. fs.unlinkSync(rpcJadePath);
  113. } catch (e) {
  114. }
  115. fs.writeFile(rpcJadePath, rpcScripts.join('\n'), function (err, x) {
  116. });
  117. //生成jade模板的导入script
  118. let scriptFolder = '/javascripts/fragment';
  119. let spath = [__dirname, '/public', scriptFolder].join('');
  120. let files = fs.readdirSync(spath);
  121. fs.writeFileSync(__dirname + '/views/include/template.jade', files.filter(function (item) {
  122. return item.toString().indexOf('runtime.js') === -1; //排除jade模板运行时
  123. }).map(function (item) {
  124. return ['script(src="', scriptFolder, '/', item, '")\n'].join('');
  125. }).join(''));
  126. //let serviceList = require('./service/api/service');
  127. //app.use('/rpc', rpc(express, '/helper.js', 'APIClient', serviceList));
  128. // =================================================================================
  129. /*app.use('/test_session', function (req, res, next) {
  130. let u = req.session.user;
  131. res.send(u);
  132. });*/
  133. // catch 404 and forward to error handler
  134. app.use(function (req, res, next) {
  135. let err = new Error('Not Found');
  136. err.status = 404;
  137. // next(err);
  138. res.render('404', {
  139. message: err.message,
  140. error: err
  141. });
  142. });
  143. // error handlers
  144. // development error handler
  145. // will print stacktrace
  146. if (app.get('env') === 'development') {
  147. app.use(function (err, req, res, next) {
  148. res.status(err.status || 500);
  149. console.error(err);
  150. res.render('500', {
  151. message: err.message,
  152. error: err
  153. });
  154. });
  155. }
  156. // production error handler
  157. // no stacktraces leaked to user
  158. app.use(function (err, req, res, next) {
  159. res.status(err.status || 500);
  160. console.error(JSON.stringify(err));
  161. res.render('500', {
  162. message: err.message,
  163. error: {}
  164. });
  165. });
  166. module.exports = app;