123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- var express = require('express');
- var request = require('request');
- var path = require('path');
- var favicon = require('serve-favicon');
- var logger = require('morgan');
- var cookieParser = require('cookie-parser');
- var bodyParser = require('body-parser');
- //var sass = require('node-sass-middleware');
- var moment = require('moment');
- //设置时区
- var timezone = require('moment-timezone');
- //本地化
- moment.locale('zh-cn');
- //Welcome Page
- var welcome = require('./routes/welcome');
- //日志输出
- var logUtils = require('./utils/logUtils');
- //查询ip
- var ip = require('./routes/ip');
- //网易云音乐
- var netease = require('./routes/netease');
- //JsonBird version 1.0
- var v1 = require('./routes/v1');
- //笑话接口
- var joke = require('./routes/joke');
- //手机号码归属地接口
- var mobile = require('./routes/mobile');
- //天气
- var weather = require('./routes/weather');
- //test
- var test = require('./routes/test');
- var app = express();
- //引入LeanCloud
- //var AV = require('leanengine');
- // AV.init({
- // appId: process.env.LEANCLOUD_APP_ID,
- // appKey: process.env.LEANCLOUD_APP_KEY,
- // masterKey: process.env.LEANCLOUD_APP_MASTER_KEY
- // });
- //app.use(AV.express());
- app.set('views', path.join(__dirname, 'views'));
- // view engine setup
- app.set('view engine', 'pug');
- app.enable('trust proxy');
- // uncomment after placing your favicon in /public
- //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
- app.use(logger('dev'));
- app.use(bodyParser.json());
- app.use(bodyParser.urlencoded({ extended: false }));
- app.use(cookieParser());
- //配置 sass
- // app.use(sass({
- // src: __dirname + '/static/sass',
- // dest: __dirname + '/static/css',
- // indentedSyntax: true,
- // sourceMap: true
- // }));
- //静态文件访问路径
- app.use('/static/', express.static(path.join(__dirname, 'static')));
- var i = 0;
- //每隔3分钟自动请求一次
- setInterval(function() {
- request('https://bird.ioliu.cn/joke?_detect=' + i++, function(err, response, body) {
- });
- }, 3 * 60 * 1000);
- /***
- * 全局过滤:统计和日志
- */
- app.use(function(req, res, next) {
- res.header("Access-Control-Allow-Origin", "*");
- res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Access-Control-Allow-Origin");
- res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
- res.header("X-Powered-By", '1.0.0');
- res.header("Vary", "Origin");
- var protocol = req.protocol;
- var host = req.hostname;
- var ip = req.headers['x-real-ip'] ? req.headers['x-real-ip'] : req.ip.replace(/::ffff:/, '');
- var ref = req.headers.referer;
- var originalUrl = req.originalUrl;
- var logs = {
- IP: ip,
- Host: host,
- Referer: ref,
- //Protocol: protocol,
- OriginalUrl: originalUrl,
- Time: moment().tz('Asia/ShangHai').format('YYYY-MM-DD HH:mm:ss.SSS')
- };
- /**
- * 不记录日志和统计的请求:
- * _detect 是 VeryCloud 探测机器人
- * *.css
- * favicon.ico
- * robots.txt
- * 图片文件
- * (JS文件可能有特殊统计需求,需要单独判断)
- */
- var filter = /_detect|\.css|favicon\.ico|robots\.txt|\.png|\.jpg|\.gif/i.test(originalUrl);
- if (!filter) {
- /**
- * console.log(req.query):
- * {
- * url: 'http://www.bing.com/HPImageArchive.aspx?format=js',
- * idx: '16',
- * n: '1'
- * }
- */
- //暂时屏蔽掉*.js日志的记录
- if (originalUrl.indexOf('.js') === -1) {
- //如果存在引用网址,则打印日志
- //if(!!logs['Referer'])
- logUtils.print(logs);
- }
- }
- next();
- });
- app.use('/', welcome);
- app.use('/test', test);
- app.use('/ip', ip);
- app.use('/v1', v1);
- app.use('/netease', netease);
- app.use('/joke', joke);
- app.use('/mobile', mobile);
- app.use('/weather', weather);
- // catch 404 and forward to error handler
- app.use(function(req, res, next) {
- var err = new Error('Not Found');
- err.status = 404;
- next(err);
- });
- // error handlers
- // development error handler
- // will print stacktrace
- if (app.get('env') === 'development') {
- app.use(function(err, req, res, next) {
- res.status(err.status || 500);
- res.send({
- data: {},
- status: {
- code: err.status,
- message: err.message
- }
- });
- });
- }
- // production error handler
- // no stacktraces leaked to user
- app.use(function(err, req, res, next) {
- res.status(err.status || 500);
- res.send({
- data: {},
- status: {
- code: err.status,
- message: err.message
- }
- });
- });
- module.exports = app;
|