app.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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. //moment.locale('zh-cn');
  11. //Welcome Page
  12. var welcome = require('./routes/welcome');
  13. //日志输出
  14. var logUtils = require('./utils/logUtils');
  15. //网易云音乐
  16. var netease = require('./routes/netease');
  17. //JsonBird version 1.0
  18. var v1 = require('./routes/v1');
  19. var app = express();
  20. app.listen(process.env.PORT || 5000);
  21. /***
  22. * 获取引用网站
  23. */
  24. app.all('*', function(req, res, next) {
  25. res.header("Access-Control-Allow-Origin", "*");
  26. res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Access-Control-Allow-Origin");
  27. res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
  28. res.header("X-Powered-By", '1.0.0');
  29. res.header("Vary", "Origin");
  30. var protocol = req.protocol;
  31. var host = req.hostname;
  32. var ip = req.ip;
  33. var ref = req.headers.referer;
  34. var originalUrl = req.originalUrl;
  35. var logs = {
  36. IP: ip,
  37. Host: host,
  38. Referer: ref,
  39. //Protocol: protocol,
  40. OriginalUrl: originalUrl,
  41. Time:moment().format('YYYY-MM-DD HH:mm:ss.ms Z')
  42. };
  43. /**
  44. * 不统计和记录日志的请求:
  45. * _detect 估计是DaoCloud 探测机器人
  46. * *.css
  47. * favicon.ico
  48. * (JS文件可能有特殊统计需求,需要单独判断)
  49. */
  50. if (!/\/_detect/.test(originalUrl) && !/.css$/.test(originalUrl) && !/favicon.ico/.test(originalUrl)) {
  51. if (originalUrl.indexOf('/bing/') > -1 || originalUrl.indexOf('/assets/') > -1) {
  52. var err = new Error('这个接口已经改了,请不要在访问这个接口了..., 新的接口:https://bird.ioliu.cn/v1/');
  53. err.status = 404;
  54. next(err);
  55. return;
  56. }
  57. //暂时屏蔽掉*.js日志的记录
  58. if (originalUrl.indexOf('.js') === -1) {
  59. //如果存在引用,则打印日志
  60. //if(!!logs['Referer'])
  61. logUtils.print(logs);
  62. }
  63. }
  64. next();
  65. });
  66. // view engine setup
  67. app.set('views', path.join(__dirname, 'views'));
  68. app.set('view engine', 'pug');
  69. app.enable('trust proxy');
  70. // uncomment after placing your favicon in /public
  71. //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  72. app.use(logger('dev'));
  73. app.use(bodyParser.json());
  74. app.use(bodyParser.urlencoded({ extended: false }));
  75. app.use(cookieParser());
  76. app.use('/static/', express.static(path.join(__dirname, 'public')));
  77. app.use('/', welcome);
  78. app.use('/v1', v1);
  79. app.use('/netease', netease);
  80. // catch 404 and forward to error handler
  81. app.use(function(req, res, next) {
  82. var err = new Error('Not Found');
  83. err.status = 404;
  84. next(err);
  85. });
  86. // error handlers
  87. // development error handler
  88. // will print stacktrace
  89. if (app.get('env') === 'development') {
  90. app.use(function(err, req, res, next) {
  91. res.status(err.status || 500);
  92. res.send({
  93. code: err.status,
  94. message: err.message,
  95. error: err
  96. });
  97. });
  98. }
  99. // production error handler
  100. // no stacktraces leaked to user
  101. app.use(function(err, req, res, next) {
  102. res.status(err.status || 500);
  103. res.send({
  104. code: err.status,
  105. message: err.message,
  106. error: {}
  107. });
  108. });
  109. module.exports = app;