Skip to content

Commit bb0b711

Browse files
committed
fix "Failed to fetch" retry case #147
1 parent ac6c3d5 commit bb0b711

File tree

7 files changed

+34
-19
lines changed

7 files changed

+34
-19
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
### 2.6.0
2+
3+
- fix "Failed to fetch" retry case [147](https://github.com/i18next/i18next-http-backend/issues/147)
4+
15
### 2.5.2
26

37
- dereference timers in node.js so that the process may exit when finished [139](https://github.com/i18next/i18next-http-backend/pull/139)

example/node/app.js

+11
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,19 @@ i18next.use(HttpBackend).init({
1616
defaultNS: 'translation',
1717
backend: {
1818
loadPath: 'http://localhost:8080/locales/{{lng}}/{{ns}}.json'
19+
// loadPath: 'http://localhost:8081/locales/{{lng}}/{{ns}}.json'
1920
}
2021
}, (err, t) => {
22+
// if (err) {
23+
// i18next.options.backend.loadPath = 'http://localhost:8080/locales/{{lng}}/{{ns}}.json'
24+
// i18next.services.backendConnector.backend.options.loadPath = 'http://localhost:8080/locales/{{lng}}/{{ns}}.json'
25+
// i18next.reloadResources(['en', 'de'], null, (e) => {
26+
// if (e) return console.error('after reload', e)
27+
// console.log(t('welcome'))
28+
// console.log(t('welcome', { lng: 'de' }))
29+
// })
30+
// return
31+
// }
2132
if (err) return console.error(err)
2233
console.log(t('welcome'))
2334
console.log(t('welcome', { lng: 'de' }))

example/node/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"type": "commonjs",
33
"dependencies": {
4-
"i18next": "19.6.3",
5-
"i18next-http-backend": "1.0.17"
4+
"i18next": "23.14.0",
5+
"i18next-http-backend": "2.6.0"
66
},
77
"devDependencies": {
88
"express": "4.19.2"

i18nextHttpBackend.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ Object.defineProperty(exports, "__esModule", {
2828
exports.default = void 0;
2929
var _utils = require("./utils.js");
3030
var _request = _interopRequireDefault(require("./request.js"));
31-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
3232
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
3333
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3434
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
35-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
36-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
37-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
38-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
35+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
36+
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
37+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
38+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
3939
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
4040
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4141
var getDefaults = function getDefaults() {
@@ -131,7 +131,7 @@ var Backend = function () {
131131
this.options.request(this.options, url, payload, function (err, res) {
132132
if (res && (res.status >= 500 && res.status < 600 || !res.status)) return callback('failed loading ' + url + '; status code: ' + res.status, true);
133133
if (res && res.status >= 400 && res.status < 500) return callback('failed loading ' + url + '; status code: ' + res.status, false);
134-
if (!res && err && err.message && err.message.indexOf('Failed to fetch') > -1) return callback('failed loading ' + url + ': ' + err.message, true);
134+
if (!res && err && err.message && (err.message.indexOf('Failed to fetch') > -1 || err.message.indexOf('failed') > -1 && err.message.indexOf('fetch') > -1)) return callback('failed loading ' + url + ': ' + err.message, true);
135135
if (err) return callback(err, false);
136136
var ret, parseErr;
137137
try {
@@ -226,7 +226,7 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
226226
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
227227
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
228228
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
229-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
229+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
230230
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
231231
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
232232
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }

i18nextHttpBackend.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class Backend {
7474
this.options.request(this.options, url, payload, (err, res) => {
7575
if (res && ((res.status >= 500 && res.status < 600) || !res.status)) return callback('failed loading ' + url + '; status code: ' + res.status, true /* retry */)
7676
if (res && res.status >= 400 && res.status < 500) return callback('failed loading ' + url + '; status code: ' + res.status, false /* no retry */)
77-
if (!res && err && err.message && err.message.indexOf('Failed to fetch') > -1) return callback('failed loading ' + url + ': ' + err.message, true /* retry */)
77+
if (!res && err && err.message && (err.message.indexOf('Failed to fetch') > -1 || (err.message.indexOf('failed') > -1 && err.message.indexOf('fetch') > -1))) return callback('failed loading ' + url + ': ' + err.message, true /* retry */)
7878
if (err) return callback(err, false)
7979

8080
let ret, parseErr

package.json

+8-8
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131
},
3232
"types": "./index.d.mts",
3333
"devDependencies": {
34-
"@babel/cli": "7.24.5",
35-
"@babel/core": "7.24.5",
36-
"@babel/preset-env": "7.24.5",
34+
"@babel/cli": "7.24.8",
35+
"@babel/core": "7.25.2",
36+
"@babel/preset-env": "7.25.3",
3737
"babel-plugin-add-module-exports": "1.0.4",
3838
"browserify": "17.0.0",
3939
"dtslint": "4.2.1",
@@ -45,14 +45,14 @@
4545
"eslint-plugin-require-path-exists": "1.1.9",
4646
"eslint-plugin-standard": "5.0.0",
4747
"expect.js": "0.3.1",
48-
"i18next": "23.11.4",
48+
"i18next": "23.14.0",
4949
"json-server": "0.17.4",
5050
"json5": "2.2.3",
51-
"mocha": "10.4.0",
51+
"mocha": "10.7.3",
5252
"tslint": "5.20.1",
53-
"tsd": "0.31.0",
54-
"typescript": "5.4.5",
55-
"uglify-js": "3.17.4",
53+
"tsd": "0.31.1",
54+
"typescript": "5.5.4",
55+
"uglify-js": "3.19.2",
5656
"xmlhttprequest": "1.8.0"
5757
},
5858
"description": "i18next-http-backend is a backend layer for i18next using in Node.js, in the browser and for Deno.",

0 commit comments

Comments
 (0)