app.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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 logUtils = require('./utils/logUtils');
  9. //Welcome Page
  10. var welcome = require('./routes/welcome');
  11. var index = require('./routes/index');
  12. //网易云音乐
  13. var netease = require('./routes/netease');
  14. //JsonBird version 1.0
  15. var v1 = require('./routes/v1');
  16. var app = express();
  17. app.listen(process.env.PORT || 5000);
  18. /***
  19. * 获取引用网站
  20. */
  21. app.all('*', function(req, res, next) {
  22. res.header("Access-Control-Allow-Origin", "*");
  23. res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Access-Control-Allow-Origin");
  24. res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
  25. res.header("X-Powered-By", '1.0.0');
  26. res.header("Vary", "Origin");
  27. var protocol = req.protocol;
  28. var host = req.hostname;
  29. var ip = req.ip;
  30. var ref = req.headers.referer;
  31. var originalUrl = req.originalUrl;
  32. var logs = {
  33. IP: ip,
  34. Host: host,
  35. Referer: ref,
  36. //Protocol: protocol,
  37. Location: '',
  38. OriginalUrl: originalUrl
  39. };
  40. /**
  41. * /Host/ 检测Host是否存在,存在就不再执行重复请求
  42. * /_detect 估计是DaoCloud 探测机器人
  43. */
  44. if (!/Host/.test(originalUrl) && !/\/_detect/.test(originalUrl)) {
  45. if (originalUrl.indexOf('/bing/') > -1 || originalUrl.indexOf('/assets/') > -1) {
  46. var err = new Error('这个接口已经改了,请不要在访问这个接口了..., 新的接口:https://api.ioliu.cn/v1/');
  47. err.status = 404;
  48. next(err);
  49. return;
  50. }
  51. if (originalUrl.indexOf('.css') === -1 && originalUrl.indexOf('.js') === -1) {
  52. logUtils.log(logs);
  53. var str = '';
  54. for (var i in logs) {
  55. str += (i + '=' + logs[i] + '&');
  56. }
  57. request('http://bird.daoapp.io?' + str);
  58. }
  59. }
  60. next();
  61. });
  62. // view engine setup
  63. app.set('views', path.join(__dirname, 'views'));
  64. app.set('view engine', 'pug');
  65. app.enable('trust proxy');
  66. // uncomment after placing your favicon in /public
  67. //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  68. app.use(logger('dev'));
  69. app.use(bodyParser.json());
  70. app.use(bodyParser.urlencoded({ extended: false }));
  71. app.use(cookieParser());
  72. app.use('/static/', express.static(path.join(__dirname, 'public')));
  73. app.use('/', welcome);
  74. app.use('/v1', v1);
  75. app.use('/netease', netease);
  76. // catch 404 and forward to error handler
  77. app.use(function(req, res, next) {
  78. var err = new Error('Not Found');
  79. err.status = 404;
  80. next(err);
  81. });
  82. // error handlers
  83. // development error handler
  84. // will print stacktrace
  85. if (app.get('env') === 'development') {
  86. app.use(function(err, req, res, next) {
  87. res.status(err.status || 500);
  88. res.send({
  89. code: err.status,
  90. message: err.message,
  91. error: err
  92. });
  93. });
  94. }
  95. // production error handler
  96. // no stacktraces leaked to user
  97. app.use(function(err, req, res, next) {
  98. res.status(err.status || 500);
  99. res.send({
  100. code: err.status,
  101. message: err.message,
  102. error: {}
  103. });
  104. });
  105. module.exports = app;