From fa4e32a73a33cc36b31aa3d2da2b35bd8f48cd69 Mon Sep 17 00:00:00 2001 From: Yuanzhe Liu Date: Sat, 24 Dec 2022 23:46:21 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=20=E4=BF=AE=E5=A4=8Dghproxy?= =?UTF-8?q?=E5=8A=A0=E9=80=9F=E9=93=BE=E6=8E=A5=E5=A4=B1=E6=95=88=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +- app.js | 87 +++++++++++++++++++++++--------------------- routes/airportsub.js | 3 +- routes/api/iqiyi.js | 4 +- test/App.test.js | 2 +- 5 files changed, 53 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index e7bcc34..3d05db9 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,8 @@ # 部署到fly.io ``` sh -curl -L https://fly.io/install.sh | sh +curl -L https://fly.io/install.sh | sh #linux +iwr https://fly.io/install.ps1 -useb | iex #windows export FLYCTL_INSTALL="/home/codespace/.fly" export PATH="$FLYCTL_INSTALL/bin:$PATH" flyctl auth login diff --git a/app.js b/app.js index 0de023e..ff1ee85 100644 --- a/app.js +++ b/app.js @@ -1,78 +1,81 @@ -const createError = require("http-errors"); -const express = require("express"); -const path = require("path"); -const cookieParser = require("cookie-parser"); -const logger = require("morgan"); -const rateLimit = require("express-rate-limit"); +const createError = require('http-errors'); +const express = require('express'); +const path = require('path'); +const cookieParser = require('cookie-parser'); +const logger = require('morgan'); +const rateLimit = require('express-rate-limit'); // 引入环境变量 -require("dotenv") - .config(); +require('dotenv') + .config(); // 引入一个个路由模块 -const danmakuRouter = require("./routes/danmaku"); -const ipinfoRouter = require("./routes/ipinfo"); -const airportsubRouter = require("./routes/airportsub"); -const DEBUG = process.env.DEBUG === "true" || false; +const danmakuRouter = require('./routes/danmaku'); +const ipinfoRouter = require('./routes/ipinfo'); +const airportsubRouter = require('./routes/airportsub'); +const schedule = require('./schedule/schedule'); +const DEBUG = process.env.DEBUG === 'true' || false; const app = express(); // view engine setup -app.set("views", path.join(__dirname, "views")); -app.set("view engine", "ejs"); -app.set("trust proxy", true); +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'ejs'); +app.set('trust proxy', true); -app.use(logger("dev")); +app.use(logger('dev')); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); // 加载静态资源 -app.use(express.static(path.join(__dirname, "public"))); -app.use("/assets", [ - express.static(__dirname + "/node_modules/jquery/dist/"), - express.static(__dirname + "/node_modules/bootstrap/dist/"), +app.use(express.static(path.join(__dirname, 'public'))); +app.use('/assets', [ + express.static(__dirname + '/node_modules/jquery/dist/'), + express.static(__dirname + '/node_modules/bootstrap/dist/'), ]); // Rate Limit +const allowlist = ['::1', '::ffff:127.0.0.1']; const apiLimiter = rateLimit({ - windowMs: 60 * 1000, // 1 minute - max: 6, // limit each IP to 6 requests per windowMs - message: "Too many requests from this IP, please try again after an minute", - standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers - skipFailedRequests: true, // Don't count failed requests (status >= 400) + windowMs: 60 * 1000, // 1 minute + max: 6, // limit each IP to 6 requests per windowMs + message: 'Too many requests from this IP, please try again after an minute', + standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers + skipFailedRequests: true, // Don't count failed requests (status >= 400) + skip: (request, response) => allowlist.includes(request.ip), }); app.use(apiLimiter); // 加载路由 -app.use("/", danmakuRouter); -app.use("/ipinfo", ipinfoRouter); -app.use("/sub", airportsubRouter); +app.use('/', danmakuRouter); +app.use('/ipinfo', ipinfoRouter); +app.use('/sub', airportsubRouter); // catch 404 and forward to error handler app.use(function (req, res, next) { - next(createError(404)); + next(createError(404)); }); // error handler app.use(function (err, req, res) { - // set locals, only providing error in development - res.locals.message = err.message; - res.locals.error = req.app.get("env") === "development" ? err : {}; + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; - // render the error page - res.status(err.status || 500); - res.render("error"); + // render the error page + res.status(err.status || 500); + res.render('error'); }); -// 引入定时任务模块 -const schedule = require("./schedule/schedule"); -schedule(app); if (!DEBUG) { - console.log("PRODUCTION MODE!该模式下TG机器人正常运行"); - // 引入TG机器人 - require("./tgbot/tgbot"); + console.log('PRODUCTION MODE!该模式下TG机器人与定时任务正常运行'); + // 引入TG机器人 + require('./tgbot/tgbot'); + // 引入定时任务模块 + const schedule = require('./schedule/schedule'); + schedule(app); } else { - console.log("DEBUG MODE!该模式下将关闭TG机器人"); + console.log('DEBUG MODE!该模式下将关闭TG机器人与定时任务'); } module.exports = app; diff --git a/routes/airportsub.js b/routes/airportsub.js index 95a765e..d26f2c6 100644 --- a/routes/airportsub.js +++ b/routes/airportsub.js @@ -58,6 +58,7 @@ router.get("/", async function (req, res) { //返回指定订阅信息 if (subinfo) { const ua = req.headers["user-agent"]; + // 判断是否要生成加速链接 if (ua.indexOf("Mozilla") === -1) { const url = await oss.signurl("SUB/" + req.query.ctype, true); res.redirect(url); @@ -150,7 +151,7 @@ router.get("/download", async function (req, res) { for (const asset of datas[i].assets) { asset.size = filesize(asset.size, {base: 2, standard: "jedec"}); asset["fastgit_url"] = asset["browser_download_url"].replace("github.com", "download.fastgit.org"); - asset["ghproxy_url"] = "https://mirror.ghproxy.com?q=" + asset["browser_download_url"]; + asset["ghproxy_url"] = "https://ghproxy.com/" + asset["browser_download_url"]; } } res.render("airportdownload", {datas}); diff --git a/routes/api/iqiyi.js b/routes/api/iqiyi.js index 56402da..df2179e 100644 --- a/routes/api/iqiyi.js +++ b/routes/api/iqiyi.js @@ -100,7 +100,9 @@ function Iqiyi() { this.xml2json(xml, contents); data[i] = undefined; xml = undefined; - global.gc(); + if (global.gc) { + global.gc(); + } memory(); } datas = undefined; diff --git a/test/App.test.js b/test/App.test.js index 59bddc9..cb73773 100644 --- a/test/App.test.js +++ b/test/App.test.js @@ -89,7 +89,7 @@ describe("App", () => { }); }); describe("机场订阅模块",function (){ - this.timeout(1000*8); + this.timeout(1000*10); it("接口不带参数测试", (done) =>{ chai.request(app) .get("/sub")