Просмотр исходного кода

将服务端模块系统迁移为 ESM

flyzto 1 месяц назад
Родитель
Сommit
2ce98c2e4c

+ 4 - 4
server/init.js

@@ -1,6 +1,6 @@
-const { init: settingInit } = require('./models/Setting');
-const { init: userInit } = require('./models/User');
-const Logs = require('./libs/logs');
+import { init as settingInit } from './models/Setting.js';
+import { init as userInit } from './models/User.js';
+import Logs from './libs/logs.js';
 
 (() => {
   settingInit({
@@ -48,4 +48,4 @@ const Logs = require('./libs/logs');
   .catch(err => {
     Logs.errDev('初始化用户失败:', err);
   });
-})();
+})();

+ 4 - 3
server/libs/cache.js

@@ -1,5 +1,5 @@
-const fs = require('fs');
-const path = require('path');
+import fs from 'fs';
+import path from 'path';
 
 function getData(file, isMap) {
   if (!fs.existsSync(file)) {
@@ -39,4 +39,5 @@ function setData(file, data, callback) {
   }
 }
 
-module.exports = { getData, setData };
+export { getData, setData };
+export default { getData, setData };

+ 2 - 2
server/libs/logs.js

@@ -1,4 +1,4 @@
-const dayjs = require('dayjs');
+import dayjs from 'dayjs';
 
 class Logs {
 
@@ -44,4 +44,4 @@ class Logs {
 
 }
 
-module.exports = Logs
+export default Logs;

+ 7 - 4
server/middleware/authMiddleware.js

@@ -1,6 +1,7 @@
-const jwt = require('jsonwebtoken');
-const Logs = require('../libs/logs');
-module.exports = (req, res, next) => {
+import jwt from 'jsonwebtoken';
+import Logs from '../libs/logs.js';
+
+const authMiddleware = (req, res, next) => {
   const token = req.headers['authorization']?.replace('Bearer ', '');
 
   if (!token) {
@@ -16,4 +17,6 @@ module.exports = (req, res, next) => {
     Logs.errDev('token验证错误:', err.message);
     res.unauthorized('无效或已过期的 token');
   }
-};
+};
+
+export default authMiddleware;

+ 14 - 9
server/models/Control.js

@@ -1,5 +1,10 @@
-const { exec } = require('child_process');
-const path = require('path');
+import { exec } from 'child_process';
+import path from 'path';
+import { fileURLToPath } from 'url';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const __rootPath = path.resolve(__dirname, '../../');
 
 const GLOBAL_DATA = {
   gitLock: false,
@@ -33,8 +38,7 @@ const gitPull = (repoPath) => {
  * 拉当前项目的代码
  */
 const gitPullCurrent = () => {
-  const rootPath = path.resolve(__dirname, '../../');
-  return gitPull(rootPath);
+  return gitPull(__rootPath);
 }
 
 /**
@@ -132,7 +136,7 @@ const pm2RestartSporttery = (hot) => {
     return pm2Restart('sporttery');
   }
   else {
-    return pm2RestartClearCache('sporttery', path.resolve(__dirname, '../../server/data'));
+    return pm2RestartClearCache('sporttery', path.resolve(__rootPath, 'server/data'));
   }
 }
 
@@ -146,7 +150,7 @@ const pm2RestartPinnacle = (hot) => {
     return pm2Restart('pinnacle');
   }
   else {
-    return pm2RestartClearCache('pinnacle', path.resolve(__dirname, '../../pinnacle/data'));
+    return pm2RestartClearCache('pinnacle', path.resolve(__rootPath, 'pinnacle/data'));
   }
 }
 
@@ -158,9 +162,9 @@ const releaseWeb = () => {
     return Promise.reject(new Error('build is locked'));
   }
   GLOBAL_DATA.buildLock = true;
-  const rootPath = path.resolve(__dirname, '../../web');
+  const webRootPath = path.resolve(__rootPath, 'web');
   return new Promise((resolve, reject) => {
-    exec('npm run build', { cwd: rootPath }, (error, stdout, stderr) => {
+    exec('npm run build', { cwd: webRootPath }, (error, stdout, stderr) => {
       GLOBAL_DATA.buildLock = false;
       if (error) {
         reject(new Error(stderr) || error);
@@ -171,4 +175,5 @@ const releaseWeb = () => {
   });
 }
 
-module.exports = { gitPullCurrent, pm2RestartSporttery, pm2RestartPinnacle, releaseWeb };
+export { gitPullCurrent, pm2RestartSporttery, pm2RestartPinnacle, releaseWeb };
+export default { gitPullCurrent, pm2RestartSporttery, pm2RestartPinnacle, releaseWeb };

+ 33 - 17
server/models/GamesPs.js

@@ -1,24 +1,26 @@
-const axios = require('axios');
-const Logs = require('../libs/logs');
-const Cache = require('../libs/cache');
-const Setting = require('./Setting');
-const OddsHistory = require('./OddsHistory');
-const { eventSolutions } = require('../triangle/eventSolutions');
-const { getPassableEvents, eventsCombination, extractOdds } = require('../triangle/trangleCalc');
-const { calcTotalProfit, calcTotalProfitWithFixedFirst, getFirstInfo } = require('../triangle/totalProfitCalc');
-const { getSetting, updateSetting } = require('../triangle/settings');
-
-const fs = require('fs');
-const path = require('path');
-
+import axios from 'axios';
+import path from 'path';
+import { fork } from 'child_process';
+import { fileURLToPath } from 'url';
+import Logs from '../libs/logs.js';
+import Cache from '../libs/cache.js';
+import Setting from './Setting.js';
+import OddsHistory from './OddsHistory.js';
+import { eventSolutions } from '../triangle/eventSolutions.js';
+import { getPassableEvents, eventsCombination, extractOdds } from '../triangle/trangleCalc.js';
+import { calcTotalProfit, calcTotalProfitWithFixedFirst, getFirstInfo } from '../triangle/totalProfitCalc.js';
+import { getSetting, updateSetting } from '../triangle/settings.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
 const GamesCacheFile = path.join(__dirname, '../data/games.cache');
 
 const childOptions = process.env.NODE_ENV == 'development' ? {
   execArgv: ['--inspect=9230'],
   stdio: ['pipe', 'pipe', 'pipe', 'ipc']
 } : {};
-const { fork } = require('child_process');
-const events_child = fork('./triangle/eventsMatch.js', [], childOptions);
+const eventsChildPath = path.join(__dirname, '../triangle/eventsMatch.js');
+const events_child = fork(eventsChildPath, [], childOptions);
 
 const PS_IOR_KEYS = [
   ['0', 'ior_mh', 'ior_mn', 'ior_mc'],
@@ -1761,7 +1763,7 @@ process.on('SIGUSR2', () => {
 });
 
 
-module.exports = {
+const GamesPs = {
   updateLeaguesList, getFilteredLeagues,
   updateGamesList, updateGamesEvents, updateBaseEvents,
   getGamesRelation,
@@ -1771,4 +1773,18 @@ module.exports = {
   getOddsHistory, getOddsHistoryGames,
   getTotalProfitWithSid, getTotalProfitWithBetInfo, getTotalReplacement,
   notifyException,
-}
+};
+
+export {
+  updateLeaguesList, getFilteredLeagues,
+  updateGamesList, updateGamesEvents, updateBaseEvents,
+  getGamesRelation,
+  updateGamesResult,
+  updateOriginalData, getOriginalData,
+  getSolutions, getGamesSolutions, getSolution, getSolutionsByIds,
+  getOddsHistory, getOddsHistoryGames,
+  getTotalProfitWithSid, getTotalProfitWithBetInfo, getTotalReplacement,
+  notifyException,
+};
+
+export default GamesPs;

+ 9 - 2
server/models/OddsHistory.js

@@ -1,4 +1,4 @@
-const mongoose = require('mongoose');
+import mongoose from 'mongoose';
 const { Schema } = mongoose;
 
 const TRACKED_IOR_KEYS = [
@@ -222,7 +222,14 @@ const startCleanup = (logger = console) => {
   return setInterval(cleanup, ODDS_HISTORY_CLEANUP_INTERVAL);
 }
 
-module.exports = {
+export {
+  getGameOddsHistory,
+  getOddsHistoryGames,
+  recordGameOdds,
+  startCleanup,
+};
+
+export default {
   getGameOddsHistory,
   getOddsHistoryGames,
   recordGameOdds,

+ 3 - 2
server/models/Setting.js

@@ -1,4 +1,4 @@
-const mongoose = require('mongoose');
+import mongoose from 'mongoose';
 const { Schema } = mongoose;
 
 const systemSettingSchema = new Schema({
@@ -195,4 +195,5 @@ const init = async (fields = {}) => {
   return setting.save();
 }
 
-module.exports = { get, update, init, onUpdate };
+export { get, update, init, onUpdate };
+export default { get, update, init, onUpdate };

+ 5 - 4
server/models/User.js

@@ -1,8 +1,8 @@
-const mongoose = require('mongoose');
+import mongoose from 'mongoose';
 const { Schema } = mongoose;
 
-const bcrypt = require('bcryptjs');
-const jwt = require('jsonwebtoken');
+import bcrypt from 'bcryptjs';
+import jwt from 'jsonwebtoken';
 
 const userSchema = new Schema({
   username: { type: String, required: true, unique: true },
@@ -104,4 +104,5 @@ const init = async ({ username, password } = {}) => {
   });
 }
 
-module.exports = { add, login, refresh, info, init };
+export { add, login, refresh, info, init };
+export default { add, login, refresh, info, init };

+ 1 - 0
server/package.json

@@ -2,6 +2,7 @@
   "name": "sporttery-server",
   "version": "1.2.3",
   "main": "server.js",
+  "type": "module",
   "scripts": {
     "dev": "nodemon --ignore data/ --ignore node_modules/ --inspect server.js",
     "dev:pannel": "nodemon --ignore data/ --ignore node_modules/ --inspect=9231 pannel.js",

+ 6 - 6
server/pannel.js

@@ -1,9 +1,9 @@
-const express = require('express');
-const dotenv = require('dotenv');
-const Logs = require('./libs/logs');
+import express from 'express';
+import dotenv from 'dotenv';
+import cookieParser from 'cookie-parser';
+import Logs from './libs/logs.js';
 
-const controlRoutes = require('./routes/control');
-const cookieParser = require('cookie-parser');
+import controlRoutes from './routes/control.js';
 const app = express();
 
 dotenv.config();
@@ -51,4 +51,4 @@ app.use('/api/control', controlRoutes);
 
 // 启动服务
 const PORT = 9056;
-app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
+app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

+ 5 - 6
server/routes/control.js

@@ -1,11 +1,10 @@
-
-const express = require('express');
+import express from 'express';
 const router = express.Router();
 
-const authMiddleware = require('../middleware/authMiddleware');
+import authMiddleware from '../middleware/authMiddleware.js';
 
-const Control = require('../models/Control');
-const Logs = require('../libs/logs');
+import Control from '../models/Control.js';
+import Logs from '../libs/logs.js';
 
 router.get('/update_code', authMiddleware, (req, res) => {
   Control.gitPullCurrent()
@@ -53,4 +52,4 @@ router.get('/release_web', authMiddleware, (req, res) => {
   });
 });
 
-module.exports = router;
+export default router;

+ 3 - 3
server/routes/pstery.js

@@ -1,7 +1,7 @@
-const express = require('express');
+import express from 'express';
 const router = express.Router();
 
-const Games = require('../models/GamesPs');
+import Games from '../models/GamesPs.js';
 
 /**
  * 更新比赛列表
@@ -289,4 +289,4 @@ router.post('/notify_exception', (req, res) => {
   res.sendSuccess();
 });
 
-module.exports = router;
+export default router;

+ 5 - 5
server/routes/system.js

@@ -1,10 +1,10 @@
-const express = require('express');
+import express from 'express';
 const router = express.Router();
 
-const authMiddleware = require('../middleware/authMiddleware');
+import authMiddleware from '../middleware/authMiddleware.js';
 
-const Setting = require('../models/Setting');
-const Logs = require('../libs/logs');
+import Setting from '../models/Setting.js';
+import Logs from '../libs/logs.js';
 
 router.get('/get_setting', authMiddleware, (req, res) => {
   Setting.get()
@@ -28,4 +28,4 @@ router.post('/update_setting', authMiddleware, (req, res) => {
   });
 });
 
-module.exports = router;
+export default router;

+ 5 - 7
server/routes/user.js

@@ -1,12 +1,10 @@
-const express = require('express');
-const bcrypt = require('bcryptjs');
-const jwt = require('jsonwebtoken');
+import express from 'express';
 const router = express.Router();
 
-const authMiddleware = require('../middleware/authMiddleware');
+import authMiddleware from '../middleware/authMiddleware.js';
 
-const User = require('../models/User');
-const Logs = require('../libs/logs');
+import User from '../models/User.js';
+import Logs from '../libs/logs.js';
 
 // 注册
 router.post('/add',authMiddleware, async (req, res) => {
@@ -119,4 +117,4 @@ router.get('/codes', authMiddleware, async (req, res) => {
   }
 });
 
-module.exports = router;
+export default router;

+ 9 - 9
server/server.js

@@ -1,12 +1,12 @@
-const express = require('express');
-const mongoose = require('mongoose');
-const dotenv = require('dotenv');
-const Logs = require('./libs/logs');
+import express from 'express';
+import mongoose from 'mongoose';
+import dotenv from 'dotenv';
+import cookieParser from 'cookie-parser';
+import Logs from './libs/logs.js';
 
-const userRoutes = require('./routes/user');
-const systemRoutes = require('./routes/system');
-const psteryRoutes = require('./routes/pstery');
-const cookieParser = require('cookie-parser');
+import userRoutes from './routes/user.js';
+import systemRoutes from './routes/system.js';
+import psteryRoutes from './routes/pstery.js';
 const app = express();
 
 dotenv.config();
@@ -61,4 +61,4 @@ mongoose.connect(process.env.MONGO_URI)
   Logs.out('MongoDB connected');
   app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
 })
-.catch(Logs.err);
+.catch(Logs.err);

+ 3 - 2
server/triangle/eventSolutions.js

@@ -1,4 +1,4 @@
-const Logs = require('../libs/logs');
+import Logs from '../libs/logs.js';
 
 /**
  * 精确浮点数字
@@ -219,4 +219,5 @@ const eventSolutions = (betInfo, showGolds=false) => {
   return result;
 }
 
-module.exports = { eventSolutions };
+export { eventSolutions };
+export default { eventSolutions };

+ 4 - 4
server/triangle/eventsMatch.js

@@ -1,6 +1,6 @@
-const Logs = require('../libs/logs');
-const { getPassableEvents, eventsCombination } = require('./trangleCalc');
-const { getSetting, updateSetting } = require('./settings');
+import Logs from '../libs/logs.js';
+import { getPassableEvents, eventsCombination } from './trangleCalc.js';
+import { getSetting, updateSetting } from './settings.js';
 
 const Request = {
   callbacks: {},
@@ -124,4 +124,4 @@ const syncSetting = () => {
 }
 
 syncSetting();
-eventMatch();
+eventMatch();

+ 4 - 2
server/triangle/iorKeys.js

@@ -1,4 +1,4 @@
-module.exports = {
+const IOR_KEYS_MAP = {
   'A:0': [
     ['ior_mh', 'ior_rac_025', 'ior_mn', 'la_wh_wa'],
     ['ior_mc', 'ior_rah_025', 'ior_mn', 'la_wh_wa'],
@@ -357,4 +357,6 @@ module.exports = {
     ['ior_ouc_25', 'ior_ouh_25', '-', 'la_wa_rv'],
     ['ior_ouc_35', 'ior_ouh_35', '-', 'la_wa_rv'],
   ]
-}
+};
+
+export default IOR_KEYS_MAP;

+ 3 - 2
server/triangle/settings.js

@@ -1,4 +1,4 @@
-const Logs = require('../libs/logs');
+import Logs from '../libs/logs.js';
 
 const SETTING = {
   innerDefaultAmount: 10000,
@@ -46,4 +46,5 @@ const updateSetting = (fields) => {
   });
 }
 
-module.exports = { getSetting, updateSetting };
+export { getSetting, updateSetting };
+export default { getSetting, updateSetting };

+ 10 - 4
server/triangle/totalProfitCalc.js

@@ -1,5 +1,5 @@
-const Logs = require('../libs/logs');
-const { eventSolutions } = require('./eventSolutions');
+import Logs from '../libs/logs.js';
+import { eventSolutions } from './eventSolutions.js';
 
 /**
  * 精确浮点数字
@@ -514,8 +514,14 @@ const calcTotalProfitWithFixedFirst = (betInfo1, betInfo2, inner_base, inner_reb
 }
 
 
-module.exports = {
+export {
   calcTotalProfit,
   calcTotalProfitWithFixedFirst,
   getFirstInfo,
-};
+};
+
+export default {
+  calcTotalProfit,
+  calcTotalProfitWithFixedFirst,
+  getFirstInfo,
+};

+ 6 - 5
server/triangle/trangleCalc.js

@@ -1,7 +1,7 @@
-const crypto = require('crypto');
-const IOR_KEYS_MAP = require('./iorKeys');
-const { getSetting } = require('./settings');
-const { eventSolutions } = require('./eventSolutions');
+import crypto from 'crypto';
+import IOR_KEYS_MAP from './iorKeys.js';
+import { getSetting } from './settings.js';
+import { eventSolutions } from './eventSolutions.js';
 
 const cartesianOdds = (selection) => {
   const [a, b, c] = selection;
@@ -285,4 +285,5 @@ const eventsCombination = (passableEvents, innerBase, innerRebate) => {
   });
 }
 
-module.exports = { eventsCombination, getPassableEvents, extractOdds };
+export { eventsCombination, getPassableEvents, extractOdds };
+export default { eventsCombination, getPassableEvents, extractOdds };