123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- /*引入包初始化*/
- global.express=require('express');
- const app=express();
- const bodyParser=require('body-parser');
- const path=require('path');
- const multer=require('multer');
- // const session=require('express-session');
- const fs=require('fs');
- const ws=require('express-ws')(app);
- const events = require("events");
- global.emitter = new events.EventEmitter();
- global.mongoose=require('mongoJs');
- global.redis=require('redis');
- global.utl=require('utl');/*工具加载*/
- const Time=require('dayFn');/*定时方法加载*/
- const SeasonInit=require('seasonInit');/*赛季段位加载*/
- const QBank=require('QBank/getQBank');/*题库加载*/
- const redis_utl=require("utl");
- const settings=require('settings');
- global.uploadFile=multer({dest:__dirname+'/asset/img/'}).any();
- global.audioFile=multer({dest:__dirname+'/asset/audio/'}).any();
- global.videoFile=multer({dest:__dirname+'/asset/video/'}).any();
- app.use(bodyParser.json());
- app.use(bodyParser.urlencoded({extended: false}));
- // app.set("trust proxy",1);/*有反向代理时设置 session */
- /*session 内存缓存*/
- // app.use(session({
- // secret:"dyfn.com",
- // name:"content",
- // resave: false,
- // rolling:true,
- // saveUninitialized: true,
- // cookie:{
- // maxAge:60*60*1000
- // }
- // }))
- /* session缓存 header判断 */
- app.use(function (req,res,next) {
- res.header("Access-Control-Allow-Credentials", "true");
- res.header("Access-Control-Allow-Origin", req.headers.origin);
- res.header("Access-Control-Allow-Headers", "Content-Type,name,token");
- res.header("Access-Control-Allow-Methods","*");
- let reqdata=utl.copy(req.headers);
- if(reqdata.name!="sp"&&!reqdata.upgrade){
- if(!uri.includes(reqdata.host)){
- res.send(utl.resData({},405,"已失效"));
- return;
- }
- }
- var API=[""];
- var edt=path.parse(req.url);
- if(edt.ext===""&&edt.name!==""){
- var ApiName=edt.name.indexOf("?")>=0?edt.name.substr(0,edt.name.indexOf("?")):edt.name;
- try {
- if(reqdata.token){
- redis_utl.ttl(reqdata.token).then(ttl_reply=>{
- if(ttl_reply>0){
- redis_utl.get(reqdata.token).then(get_reply=>{
- redis_utl.expire(reqdata.token,global.user_session_time)
- if(~edt.name.indexOf('del')){
- if(get_reply.access.includes(admin)){
- next();
- }else {
- res.send(utl.resData({},401,"无此权限"))
- }
- }else {
- let reqData=Object.keys(req.body).length?req.body:req.query;
- if(reqData.pageSize&&ApiName!="classList"&&(reqData.pageSize<=0||reqData.pageSize>20)){
- Object.keys(req.body).length?req.body.pageSize=1:req.query.pageSize=1;
- }
- next();
- }
- })
- }else {
- res.send(utl.resData({},403,"登录已失效"))
- }
- })
- }else {
- res.send(utl.resData({},403,"登录已失效"))
- }
- }catch (e) {
- res.send(utl.resData({},403,"登录已失效"))
- }
- }else {
- next();
- }
- })
- /*引入静态文件*/
- app.use(express.static('web'));
- app.use(express.static('page'));
- app.use(express.static('uploadFile'));
- app.use(express.static('audio'));
- /*程序设置*/
- global.admin="";/*权限*/
- global.API_prefix="";/*接口前缀*/
- global.idLen=24;/*id长度判断设置*/
- settings.getSettings().then(data=>{
- global.user_session_time=data.sessionTime;
- global.tokenLen=data.tokenLen;/*token长度设置*/
- global.MaxShare=data.MaxShare;/*最大分享积分*/
- global.invitationPoint=data.invitationPoint;/*邀请新人积分*/
- global.subscribePoint=data.subscribePoint;/*关注公众号积分*/
- global.signDefault=data.signPoint;/*连续签到积分*/
- global.rechargeShare=data.rechargeShare;/*充值邀请人提成积分*/
- console.log('settings loaded.')
- }).catch(err=>{
- console.log('settings Load failed!')
- })
- const QBanks=new QBank({});/*初始题库*/
- const QBankLV=10;/*题目级别*/
- global.bankLV=[];/*缓存题库*/
- for(let i=1;i<=QBankLV;i++){
- QBanks.getExercises(i).then(data=>{/*题库 缓存*/
- if(!data.length){
- console.log("QBank"+i+" is null!")
- }
- global.bankLV[i]=data
- console.log("QBank"+i+" loaded.")
- });
- }
- /*定时执行任务*/
- const schedule=new Time({});
- schedule.init();/*每小时59分时更新数据库用户活跃数据 每天23:59:59时处理用户活跃数据并初始化*/
- /*赛季段位加载*/
- const rank=new SeasonInit();/*初始赛季段位*/
- rank.init().then(data=>{/*加载赛季段位*/
- if(!data){
- console.log("rank Load failed!")
- } else {
- if(!Object.keys(data.lastKnowledge).length){
- console.log("knowledge Load failed!")
- }else if(!Object.keys(data.lastQualify).length){
- console.log("qualify Load failed!")
- }else if(!data.knowledge){
- console.log("knowledge's rank Load failed!")
- }else if(!data.qualify){
- console.log("qualify's rank Load failed!")
- }
- }
- global.lastKnowledge=data.lastKnowledge;/*知识赛季信息*/
- global.lastQualify=data.lastQualify;/*资质赛季信息*/
- global.knowledgeRank=data.knowledge;/*知识段位*/
- global.qualifyRank=data.qualify;/*资质段位*/
- global.mixKnowledgeRank=Math.floor(data.knowledge.length*.6);/*最低降段段位*/
- global.mixQualifyRank=Math.floor(data.qualify.length*.6);/*最低降段段位*/
- });
- /*引入api路由*/
- const Home = require('router/home.js');
- const Pay = require('router/pay.js');
- const Login = require('router/login.js');
- const Knowledge = require('router/knowledge.js');
- const Qualify = require('router/qualify.js');
- const Course = require('router/course.js');
- const Class = require('router/class.js');
- const Recharge = require('router/recharge.js');
- const User = require('router/user.js');
- const Init = require('router/init.js');
- const Points = require('router/points.js');
- const QusBank =require('router/QBank.js');
- const Game =require('router/game.js');
- const Upload =require('router/upload.js');
- const Setting =require('router/setting.js');
- /*配置api路由*/
- /*对战 ws*/
- const gameFn=require("main");
- global.wsList={};
- app.ws('/.....',function (ws,req) {
- ws.on('message', function(msg) {
- try {
- let message=JSON.parse(decodeURIComponent(msg));
- if(message.token){
- redis_utl.get(message.token).then(get_reply=>{
- if(get_reply){
- redis_utl.expire(message.token,global.user_session_time)
- if(!wsList.hasOwnProperty(get_reply._id)){
- ws.token=get_reply.token;
- wsList[get_reply._id]=ws;
- }else {
- if(wsList[get_reply._id].token!==get_reply.token){
- ws.token=get_reply.token;
- wsList[get_reply._id]=ws;
- }
- }
- gameFn.controller(message,get_reply._id)
- }else {
- ws.send(encodeURIComponent(JSON.stringify({'mes':"token is bad"})))
- }
- })
- }else {
- ws.send(encodeURIComponent(JSON.stringify({'mes':"token is undefined"})))
- }
- }catch (e) {
- redis_utl.get(ws.token).then(get_reply=>{
- if(get_reply){
- delete wsList[get_reply._id]
- }
- })
- ws.close()
- }
- });
- ws.on('close',function () {
- redis_utl.get(ws.token).then(get_reply=>{
- if(get_reply){
- delete wsList[get_reply._id]
- }
- })
- ws.close()
- })
- })
- emitter.on('sendMes', function(userId=[],mesData) {
- for(let i=0;i<userId.length;i++){
- if(wsList.hasOwnProperty(userId[i])){
- if(wsList[userId[i]].readyState===1){
- wsList[userId[i]].send(encodeURIComponent(JSON.stringify(mesData)))
- }else {
- delete wsList[userId[i]]
- }
- }
- }
- });
- /*服务器端口*/
- app.listen('',function(){
- console.log('server running.')
- })
- /*服务器路由*/
- app.get('*',function(req,res){
- var edt=path.parse(req.url);
- var uri="";
- // var deviceAgent = req.headers["user-agent"].toLowerCase()
- // var agentID = deviceAgent.match(/(iphone|ipod|ipad|android)/)
- // var version = deviceAgent.match(/(version)/);
- if(edt.dir==='/'){
- if(!edt.name){
- edt.name='index';
- //if(agentID&&version){
- // console.log(111,'手机、pid')
- uri='/index.html';
- //}else{
- //res.send('该服务不支持电脑访问')
- // }
- }else if(edt.dir==='/'&&edt.base==='spAdmin'){
- uri='index.html';
- }else {
- if(edt.name!=='favicon'){
- uri='/'+edt.name+edt.ext;
- }
- }
- }else{
- uri=path.join(edt.dir,edt.base);
- }
- try{
- fs.readFileSync(__dirname+uri);
- res.sendFile(__dirname+uri);
- }catch(e){
- res.sendFile(__dirname+'/page/404.html');
- }
- })
|