app.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. var express = require('express');
  2. var request = require('superagent');
  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 ga = require('universal-analytics');
  9. //Welcome Page
  10. var welcome = require('./routes/welcome');
  11. //日志输出
  12. var logUtils = require('./utils/logUtils');
  13. //查询ip
  14. var ip = require('./routes/ip');
  15. //网易云音乐
  16. var netease = require('./routes/netease');
  17. //JsonBird version 1.0
  18. var v1 = require('./routes/v1');
  19. var v2 = require('./routes/v2');
  20. //笑话接口
  21. var joke = require('./routes/joke');
  22. //手机号码归属地接口
  23. var mobile = require('./routes/mobile');
  24. //天气
  25. var weather = require('./routes/weather');
  26. //test
  27. //var test = require('./routes/test');
  28. var app = express();
  29. app.set('views', path.join(__dirname, 'views'));
  30. // view engine setup
  31. app.set('view engine', 'pug');
  32. app.enable('trust proxy');
  33. app.disable('x-powered-by');
  34. // uncomment after placing your favicon in /public
  35. //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  36. // app.use(logger('combined', {
  37. // skip: function(req, res) { return res.statusCode < 400 }
  38. // }));
  39. //app.use(bodyParser.raw({ type: '*/*' }));
  40. app.use(function(req, res, next) {
  41. // 设置跨域头 ************** 本地使用时请去掉以下3行的注释
  42. // res.header("Access-Control-Allow-Origin", "*");
  43. // res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Access-Control-Allow-Origin");
  44. // res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
  45. /***
  46. * 处理OPTIONS请求
  47. */
  48. if (req.method === 'OPTIONS') {
  49. res.sendStatus(200);
  50. } else next();
  51. });
  52. app.use(bodyParser.json());
  53. app.use(bodyParser.urlencoded({ extended: true }));
  54. app.use(cookieParser());
  55. var visitor = ga('UA-61934506-2');
  56. app.use(function(req,res,next){
  57. var path = req.path;
  58. var ip = req.ip;
  59. var ua = req['headers']['user-agent'];
  60. var dr = req['headers']['referer'];
  61. let dh = req.query.url || req.params.url || '';
  62. let params = {
  63. dp:req.path,
  64. dh:dh,
  65. uip:ip,
  66. ua:ua,
  67. dr:dr
  68. }
  69. if(path.indexOf('/static/') == -1){
  70. console.log(params)
  71. visitor.pageview(params).send();
  72. }
  73. next()
  74. });
  75. //静态文件访问路径
  76. app.use('/static', express.static(path.join(__dirname, 'static')));
  77. app.use(favicon(__dirname + '/static/images/favicon.ico'));
  78. app.use('/', welcome);
  79. // app.use('/test', test);
  80. app.use('/ip', ip);
  81. app.use('/v1', v1);
  82. app.use('/v2', v2);
  83. app.use('/netease', netease);
  84. app.use('/joke', joke);
  85. app.use('/mobile', mobile);
  86. app.use('/weather', weather);
  87. /**
  88. * Robots.txt
  89. */
  90. app.use('/robots.txt', function(req, res, next) {
  91. res.header('content-type', 'text/plain');
  92. res.send('User-Agent: * \nAllow: /');
  93. });
  94. // catch 404 and forward to error handler
  95. app.use(function(req, res, next) {
  96. var err = new Error('Not Found');
  97. err.status = 404;
  98. next(err);
  99. });
  100. // error handlers
  101. // development error handler
  102. // will print stacktrace
  103. if (app.get('env') === 'development') {
  104. app.use(function(err, req, res, next) {
  105. res.status(err.status || 500);
  106. res.send({
  107. data: {},
  108. status: {
  109. code: err.status,
  110. message: err.message
  111. }
  112. });
  113. });
  114. }
  115. // production error handler
  116. // no stacktraces leaked to user
  117. app.use(function(err, req, res, next) {
  118. res.status(err.status || 500);
  119. res.send({
  120. data: {},
  121. status: {
  122. code: err.status,
  123. message: err.message
  124. }
  125. });
  126. });
  127. module.exports = app;