diff --git a/config.js b/config.js index bb692d53dc..70c2e11351 100644 --- a/config.js +++ b/config.js @@ -4,6 +4,7 @@ module.exports = { cacheExpire: process.env.CACHE_EXPIRE || 5 * 60, // 缓存时间,单位为秒 ua: process.env.UA || 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36', listenInaddrAny: process.env.LISTEN_INADDR_ANY || 1, // 是否允许公网连接,取值 0 1 + requestRetry: process.env.REQUEST_RETRY || 2, // 请求失败重试次数 redis: { url: process.env.REDIS_URL || 'redis://localhost:6379/', options: { diff --git a/package.json b/package.json index e70fded190..47ff067d5a 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "dependencies": { "art-template": "4.12.2", "axios": "0.18.0", + "axios-retry": "3.1.0", "cheerio": "1.0.0-rc.2", "co-redis": "2.1.1", "crypto": "1.0.1", diff --git a/routes/bilibili/bangumi.js b/routes/bilibili/bangumi.js index 68f01f9d40..c8d92f9fa7 100644 --- a/routes/bilibili/bangumi.js +++ b/routes/bilibili/bangumi.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/bilibili/coin.js b/routes/bilibili/coin.js index f242658412..99f62c7d6a 100644 --- a/routes/bilibili/coin.js +++ b/routes/bilibili/coin.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const qs = require('querystring'); const config = require('../../config'); diff --git a/routes/bilibili/dynamic.js b/routes/bilibili/dynamic.js index a3bd2ec58d..ffbe4208cb 100644 --- a/routes/bilibili/dynamic.js +++ b/routes/bilibili/dynamic.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const JSONbig = require('json-bigint'); const config = require('../../config'); diff --git a/routes/bilibili/fav.js b/routes/bilibili/fav.js index 776e0f03c6..486d1b1418 100644 --- a/routes/bilibili/fav.js +++ b/routes/bilibili/fav.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const qs = require('querystring'); const config = require('../../config'); diff --git a/routes/bilibili/followers.js b/routes/bilibili/followers.js index 532c7233b7..83f5616b88 100644 --- a/routes/bilibili/followers.js +++ b/routes/bilibili/followers.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const qs = require('querystring'); const config = require('../../config'); diff --git a/routes/bilibili/followings.js b/routes/bilibili/followings.js index 0a9dba6276..4aa655c6a6 100644 --- a/routes/bilibili/followings.js +++ b/routes/bilibili/followings.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const qs = require('querystring'); const config = require('../../config'); diff --git a/routes/bilibili/linkNews.js b/routes/bilibili/linkNews.js index 58938755d9..08d75d5cd4 100644 --- a/routes/bilibili/linkNews.js +++ b/routes/bilibili/linkNews.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/bilibili/liveArea.js b/routes/bilibili/liveArea.js index d5345ad553..72f93e20ab 100644 --- a/routes/bilibili/liveArea.js +++ b/routes/bilibili/liveArea.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/bilibili/liveRoom.js b/routes/bilibili/liveRoom.js index 5496c3bcf3..64d894e0c4 100644 --- a/routes/bilibili/liveRoom.js +++ b/routes/bilibili/liveRoom.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/bilibili/liveSearch.js b/routes/bilibili/liveSearch.js index 68fa1e6b82..23b24edfdf 100644 --- a/routes/bilibili/liveSearch.js +++ b/routes/bilibili/liveSearch.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/bilibili/partion.js b/routes/bilibili/partion.js index a4e5ed3595..abfbf9681e 100644 --- a/routes/bilibili/partion.js +++ b/routes/bilibili/partion.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/bilibili/reply.js b/routes/bilibili/reply.js index ad0fa50068..cb4d4671e7 100644 --- a/routes/bilibili/reply.js +++ b/routes/bilibili/reply.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); const cheerio = require('cheerio'); const iconv = require('iconv-lite'); diff --git a/routes/bilibili/video.js b/routes/bilibili/video.js index b6b367f7c0..4fda700df5 100644 --- a/routes/bilibili/video.js +++ b/routes/bilibili/video.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const qs = require('querystring'); const config = require('../../config'); diff --git a/routes/biquge/chapter.js b/routes/biquge/chapter.js index 1d3fb107d4..c055ea4e85 100644 --- a/routes/biquge/chapter.js +++ b/routes/biquge/chapter.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); const iconv = require('iconv-lite'); diff --git a/routes/cctv/category.js b/routes/cctv/category.js index c75f75a204..d55a550a13 100644 --- a/routes/cctv/category.js +++ b/routes/cctv/category.js @@ -1,22 +1,21 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { const category = ctx.params.category; - const url = `http://news.cctv.com/${category}/data/index.json` + const url = `http://news.cctv.com/${category}/data/index.json`; const response = await axios({ method: 'get', url: url, headers: { 'User-Agent': config.ua, - 'Referer': url, - } + Referer: url, + }, }); const data = response.data; const list = data.rollData; - const article_item = []; ctx.state.data = { title: `央视新闻 ${category}`, @@ -26,7 +25,7 @@ module.exports = async (ctx) => { title: item.title, description: item.description, link: item.url, - pubDate: new Date(item.dateTime).toUTCString() + pubDate: new Date(item.dateTime).toUTCString(), })), }; }; diff --git a/routes/dapenti/tugua.js b/routes/dapenti/tugua.js index 2a18a81e73..379f08dd57 100644 --- a/routes/dapenti/tugua.js +++ b/routes/dapenti/tugua.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); const iconv = require('iconv-lite'); diff --git a/routes/disqus/posts.js b/routes/disqus/posts.js index 44636afa3f..664ff32ad7 100644 --- a/routes/disqus/posts.js +++ b/routes/disqus/posts.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/dockone/weekly.js b/routes/dockone/weekly.js index fa2534e096..1e702c7871 100644 --- a/routes/dockone/weekly.js +++ b/routes/dockone/weekly.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/douban/later.js b/routes/douban/later.js index 024364065f..62c3053a26 100644 --- a/routes/douban/later.js +++ b/routes/douban/later.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); module.exports = async (ctx) => { const response = await axios({ diff --git a/routes/douban/playing.js b/routes/douban/playing.js index b71c02281b..e231edb8cc 100644 --- a/routes/douban/playing.js +++ b/routes/douban/playing.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); module.exports = async (ctx) => { const city = ctx.params.city; diff --git a/routes/douban/ustop.js b/routes/douban/ustop.js index c22745a600..05b824a7f0 100644 --- a/routes/douban/ustop.js +++ b/routes/douban/ustop.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); module.exports = async (ctx) => { const response = await axios({ diff --git a/routes/express/express.js b/routes/express/express.js index eabfe11eea..f5ab596da8 100644 --- a/routes/express/express.js +++ b/routes/express/express.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/geektime/column.js b/routes/geektime/column.js index ca97c80675..c89b0e430f 100644 --- a/routes/geektime/column.js +++ b/routes/geektime/column.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/instagram/user.js b/routes/instagram/user.js index 0e3951f7b4..b007e908a5 100644 --- a/routes/instagram/user.js +++ b/routes/instagram/user.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/iqiyi/dongman.js b/routes/iqiyi/dongman.js index 74310374b5..295c9dea6c 100644 --- a/routes/iqiyi/dongman.js +++ b/routes/iqiyi/dongman.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/jandan/pic.js b/routes/jandan/pic.js index aba3ec2653..d38d6a7f08 100644 --- a/routes/jandan/pic.js +++ b/routes/jandan/pic.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const crypto = require('crypto'); const config = require('../../config'); diff --git a/routes/jianshu/collection.js b/routes/jianshu/collection.js index d30e7d5400..73bf75cf2a 100644 --- a/routes/jianshu/collection.js +++ b/routes/jianshu/collection.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/jianshu/home.js b/routes/jianshu/home.js index de6352487c..70f2257c16 100644 --- a/routes/jianshu/home.js +++ b/routes/jianshu/home.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/jianshu/monthly.js b/routes/jianshu/monthly.js index a14fc24085..0ede451c39 100644 --- a/routes/jianshu/monthly.js +++ b/routes/jianshu/monthly.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/jianshu/user.js b/routes/jianshu/user.js index 2f6f49e138..6d91722faa 100644 --- a/routes/jianshu/user.js +++ b/routes/jianshu/user.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/jianshu/weekly.js b/routes/jianshu/weekly.js index a7283f94b2..ce053b2dc9 100644 --- a/routes/jianshu/weekly.js +++ b/routes/jianshu/weekly.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/jike/topic.js b/routes/jike/topic.js index 689ea41f8d..acee1cbc29 100644 --- a/routes/jike/topic.js +++ b/routes/jike/topic.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/jike/user.js b/routes/jike/user.js index 5762c816b9..1a3f9d191d 100644 --- a/routes/jike/user.js +++ b/routes/jike/user.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/juejin/category.js b/routes/juejin/category.js index 5bd63343f9..d76ed8670d 100644 --- a/routes/juejin/category.js +++ b/routes/juejin/category.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/mzitu/category.js b/routes/mzitu/category.js index 2f1246f46b..9d9a56c427 100644 --- a/routes/mzitu/category.js +++ b/routes/mzitu/category.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/mzitu/post.js b/routes/mzitu/post.js index 890d534ba1..25b956d659 100644 --- a/routes/mzitu/post.js +++ b/routes/mzitu/post.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/mzitu/tag.js b/routes/mzitu/tag.js index 2981b88aa7..f5c2e48f28 100644 --- a/routes/mzitu/tag.js +++ b/routes/mzitu/tag.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/mzitu/tags.js b/routes/mzitu/tags.js index d94152b01c..bff38c9508 100644 --- a/routes/mzitu/tags.js +++ b/routes/mzitu/tags.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/ncm/artist.js b/routes/ncm/artist.js index a3f5b8fcd2..63585caba2 100644 --- a/routes/ncm/artist.js +++ b/routes/ncm/artist.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/ncm/playlist.js b/routes/ncm/playlist.js index 27e511ba97..06d9e1cd17 100644 --- a/routes/ncm/playlist.js +++ b/routes/ncm/playlist.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const qs = require('querystring'); const config = require('../../config'); diff --git a/routes/ncm/userplaylist.js b/routes/ncm/userplaylist.js index 8e44fb16f1..7d6ae45c9c 100644 --- a/routes/ncm/userplaylist.js +++ b/routes/ncm/userplaylist.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const qs = require('querystring'); const config = require('../../config'); diff --git a/routes/pixiv/api/getBookmarks.js b/routes/pixiv/api/getBookmarks.js index fd6aa22cec..c6916d80cd 100644 --- a/routes/pixiv/api/getBookmarks.js +++ b/routes/pixiv/api/getBookmarks.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../../utils/axios'); const maskHeader = require('../constants').maskHeader; /** diff --git a/routes/pixiv/api/getIllusts.js b/routes/pixiv/api/getIllusts.js index 5462159d21..84df654601 100644 --- a/routes/pixiv/api/getIllusts.js +++ b/routes/pixiv/api/getIllusts.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../../utils/axios'); const maskHeader = require('../constants').maskHeader; /** diff --git a/routes/pixiv/api/getRanking.js b/routes/pixiv/api/getRanking.js index ab74839ac5..cb570ecedc 100644 --- a/routes/pixiv/api/getRanking.js +++ b/routes/pixiv/api/getRanking.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../../utils/axios'); const maskHeader = require('../constants').maskHeader; const assert = require('assert'); diff --git a/routes/pixiv/api/getUserDetail.js b/routes/pixiv/api/getUserDetail.js index f6d4fbb67c..a478a4ba5c 100644 --- a/routes/pixiv/api/getUserDetail.js +++ b/routes/pixiv/api/getUserDetail.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../../utils/axios'); const maskHeader = require('../constants').maskHeader; /** diff --git a/routes/pixiv/token.js b/routes/pixiv/token.js index ffe665a2a0..e3f90111b3 100644 --- a/routes/pixiv/token.js +++ b/routes/pixiv/token.js @@ -2,7 +2,7 @@ const config = require('../../config'); const logger = require('../../utils/logger'); const wait = require('../../utils/wait'); const FormData = require('form-data'); -const axios = require('axios'); +const axios = require('../../utils/axios'); const maskHeader = require('./constants').maskHeader; const pixivConfig = config.pixiv; @@ -29,13 +29,18 @@ async function getToken() { data.append(key, element); } } - const response = await axios.post('https://oauth.secure.pixiv.net/auth/token', data, { + const response = await axios({ + method: 'post', + url: 'https://oauth.secure.pixiv.net/auth/token', + data: data, headers: { ...maskHeader, ...data.getHeaders(), }, + }).catch(function() { + logger.error('Pixiv login fail.'); }); - return response.data.response; + return response && response.data && response.data.response; } async function refreshToken(refresh_token) { @@ -63,22 +68,24 @@ async function refreshToken(refresh_token) { async function tokenLoop() { const res = await getToken(); - logger.info('Pixiv login success.'); - token = res.access_token; - let refresh_token = res.refresh_token; - let expires_in = res.expires_in * 0.9; - // eslint-disable-next-line no-constant-condition - while (true) { - await wait(expires_in * 1000); - try { - const refresh_res = await refreshToken(refresh_token); - logger.debug('Pixiv refresh token success.'); - token = refresh_res.access_token; - refresh_token = refresh_res.refresh_token; - expires_in = refresh_res.expires_in * 0.9; - } catch (err) { - expires_in = 30; - logger.err(`Pixiv refresh token failed, retry in ${expires_in} seconds.`, err); + if (res) { + logger.info('Pixiv login success.'); + token = res.access_token; + let refresh_token = res.refresh_token; + let expires_in = res.expires_in * 0.9; + // eslint-disable-next-line no-constant-condition + while (true) { + await wait(expires_in * 1000); + try { + const refresh_res = await refreshToken(refresh_token); + logger.debug('Pixiv refresh token success.'); + token = refresh_res.access_token; + refresh_token = refresh_res.refresh_token; + expires_in = refresh_res.expires_in * 0.9; + } catch (err) { + expires_in = 30; + logger.err(`Pixiv refresh token failed, retry in ${expires_in} seconds.`, err); + } } } } diff --git a/routes/rsshub/rss.js b/routes/rsshub/rss.js index 0587b683ce..aba9780417 100644 --- a/routes/rsshub/rss.js +++ b/routes/rsshub/rss.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/tieba/forum.js b/routes/tieba/forum.js index 10409ecdad..f4effb64f0 100644 --- a/routes/tieba/forum.js +++ b/routes/tieba/forum.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/toutiao/today.js b/routes/toutiao/today.js index 9acd9ce6d7..cddc3f2041 100644 --- a/routes/toutiao/today.js +++ b/routes/toutiao/today.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/toutiao/user.js b/routes/toutiao/user.js index a5138ab697..678da62c07 100644 --- a/routes/toutiao/user.js +++ b/routes/toutiao/user.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/tucaoqq/post.js b/routes/tucaoqq/post.js index c0156628d6..627139000d 100644 --- a/routes/tucaoqq/post.js +++ b/routes/tucaoqq/post.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); const md5 = require('../../utils/md5'); diff --git a/routes/weibo/keyword.js b/routes/weibo/keyword.js index b900ebeea4..e9ece32d3b 100644 --- a/routes/weibo/keyword.js +++ b/routes/weibo/keyword.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); const weiboUtils = require('./utils'); diff --git a/routes/weibo/user.js b/routes/weibo/user.js index f670a01729..715158c9af 100644 --- a/routes/weibo/user.js +++ b/routes/weibo/user.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); const weiboUtils = require('./utils'); diff --git a/routes/weibo/user2.js b/routes/weibo/user2.js index 62d750f4ad..3e34bf3578 100644 --- a/routes/weibo/user2.js +++ b/routes/weibo/user2.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); const weiboUtils = require('./utils'); diff --git a/routes/zhihu/activities.js b/routes/zhihu/activities.js index 4dea4c4bd2..ba2d221c17 100644 --- a/routes/zhihu/activities.js +++ b/routes/zhihu/activities.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/zhihu/answers.js b/routes/zhihu/answers.js index 52eae9f328..fae692bc61 100644 --- a/routes/zhihu/answers.js +++ b/routes/zhihu/answers.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/zhihu/collection.js b/routes/zhihu/collection.js index a2d59cfc24..112a933e17 100644 --- a/routes/zhihu/collection.js +++ b/routes/zhihu/collection.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const config = require('../../config'); diff --git a/routes/zhihu/daily.js b/routes/zhihu/daily.js index 014d9180b3..f1638bce50 100644 --- a/routes/zhihu/daily.js +++ b/routes/zhihu/daily.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); // 参考:https://github.com/izzyleung/ZhihuDailyPurify/wiki/%E7%9F%A5%E4%B9%8E%E6%97%A5%E6%8A%A5-API-%E5%88%86%E6%9E%90 diff --git a/routes/zhihu/zhuanlan.js b/routes/zhihu/zhuanlan.js index dff6c9e4ef..a4fddcaa11 100644 --- a/routes/zhihu/zhuanlan.js +++ b/routes/zhihu/zhuanlan.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const config = require('../../config'); module.exports = async (ctx) => { diff --git a/routes/ziroom/room.js b/routes/ziroom/room.js index 3eccebb098..c7d9bcf2d5 100644 --- a/routes/ziroom/room.js +++ b/routes/ziroom/room.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +const axios = require('../../utils/axios'); const qs = require('querystring'); const config = require('../../config'); diff --git a/utils/axios.js b/utils/axios.js new file mode 100644 index 0000000000..842af2a7f7 --- /dev/null +++ b/utils/axios.js @@ -0,0 +1,16 @@ +const logger = require('./logger'); +const config = require('../config'); + +const axiosRetry = require('axios-retry'); +const axios = require('axios'); + +axiosRetry(axios, { + retries: config.requestRetry, + retryCondition: () => true, + retryDelay: (count, err) => { + logger.error(`Request ${err.config.url} fail, retry attempt #${count}: ${err}`); + return 100; + }, +}); + +module.exports = axios; diff --git a/yarn.lock b/yarn.lock index 30cbeec81f..5194bb563a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -504,6 +504,12 @@ aws4@^1.6.0: version "1.7.0" resolved "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" +axios-retry@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/axios-retry/-/axios-retry-3.1.0.tgz#00d911e989a8c082a0acf8b90668cfa12733d736" + dependencies: + is-retry-allowed "^1.1.0" + axios@0.18.0, axios@^0.18.0: version "0.18.0" resolved "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" @@ -3157,7 +3163,7 @@ is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" -is-retry-allowed@^1.0.0: +is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"