app.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. var express = require('express');
  2. var request = require('request');
  3. var path = require('path');
  4. var favicon = require('serve-favicon');
  5. var logger = require('morgan');
  6. var cookieParser = require('cookie-parser');
  7. var bodyParser = require('body-parser');
  8. var moment = require('moment');
  9. //设置时区
  10. var timezone = require('moment-timezone');
  11. //本地化
  12. moment.locale('zh-cn');
  13. //Welcome Page
  14. var welcome = require('./routes/welcome');
  15. //日志输出
  16. var logUtils = require('./utils/logUtils');
  17. //网易云音乐
  18. var netease = require('./routes/netease');
  19. //JsonBird version 1.0
  20. var v1 = require('./routes/v1');
  21. var app = express();
  22. //app.listen(process.env.PORT || 5000);
  23. /***
  24. * 统一过滤,打印日志
  25. */
  26. app.all('*', function(req, res, next) {
  27. res.header("Access-Control-Allow-Origin", "*");
  28. res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Access-Control-Allow-Origin");
  29. res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
  30. res.header("X-Powered-By", '1.0.0');
  31. res.header("Vary", "Origin");
  32. var protocol = req.protocol;
  33. var host = req.hostname;
  34. var ip = req.ip;
  35. var ips = req.ips;
  36. console.log(ips);
  37. console.log(req.get('X-Forwarded-For'));
  38. var ref = req.headers.referer;
  39. var originalUrl = req.originalUrl;
  40. var logs = {
  41. IP: ip,
  42. Host: host,
  43. Referer: ref,
  44. //Protocol: protocol,
  45. OriginalUrl: originalUrl,
  46. Time: moment().tz('Asia/ShangHai').format('YYYY-MM-DD HH:mm:ss.ms')
  47. };
  48. /**
  49. * 不记录日志和统计的请求:
  50. * _detect 是 VeryCloud 探测机器人
  51. * *.css
  52. * favicon.ico
  53. * robots.txt
  54. * 图片文件
  55. * (JS文件可能有特殊统计需求,需要单独判断)
  56. */
  57. var filter = /_detect|.css|favicon.ico|robots.txt|.png|.jpg|.gif/i.test(originalUrl);
  58. if (!filter) {
  59. /**
  60. * console.log(req.query):
  61. * {
  62. * url: 'http://www.bing.com/HPImageArchive.aspx?format=js',
  63. * idx: '16',
  64. * n: '1'
  65. * }
  66. */
  67. //暂时屏蔽掉*.js日志的记录
  68. if (originalUrl.indexOf('.js') === -1) {
  69. //如果存在引用网址,则打印日志
  70. //if(!!logs['Referer'])
  71. logUtils.print(logs);
  72. }
  73. }
  74. next();
  75. });
  76. // view engine setup
  77. app.set('views', path.join(__dirname, 'views'));
  78. app.set('view engine', 'pug');
  79. app.enable('trust proxy');
  80. // uncomment after placing your favicon in /public
  81. //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  82. app.use(logger('dev'));
  83. app.use(bodyParser.json());
  84. app.use(bodyParser.urlencoded({ extended: false }));
  85. app.use(cookieParser());
  86. //静态文件访问路径
  87. app.use('/static/', express.static(path.join(__dirname, 'public')));
  88. app.use('/', welcome);
  89. app.use('/v1', v1);
  90. app.use('/netease', netease);
  91. // catch 404 and forward to error handler
  92. app.use(function(req, res, next) {
  93. var err = new Error('Not Found');
  94. err.status = 404;
  95. next(err);
  96. });
  97. // error handlers
  98. // development error handler
  99. // will print stacktrace
  100. if (app.get('env') === 'development') {
  101. app.use(function(err, req, res, next) {
  102. res.status(err.status || 500);
  103. res.send({
  104. status: err.status,
  105. message: err.message
  106. });
  107. });
  108. }
  109. // production error handler
  110. // no stacktraces leaked to user
  111. app.use(function(err, req, res, next) {
  112. res.status(err.status || 500);
  113. res.send({
  114. status: err.status,
  115. message: err.message
  116. });
  117. });
  118. module.exports = app;