Промежуточное программное обеспечение Express работает в бесконечном цикле для закодированных URL-адресов, в моем URL-адресе присутствуют французские буквы, поэтому каждый раз, когда я пытаюсь найти что-то в URL-адресе, подобном /équipement
Экспресс-сервер работает в бесконечном циклепри попытке обработать URL (/%C3%A9quipement/
), и я получаю ошибку ERR_TOO_MANY_REDIRECTS
.
Это не происходит в моей локальной среде, происходит в среде разработки, размещенной в Azure, и на нем работает веб-сервер IIS..
Настроено 3 промежуточных ПО,
server.js
app.use(middlewares.ipcheck)
app.use('/:lang*', middlewares.redirection)
app.use(microcache.cacheSeconds(600, middlewares.microcache))
На основе журналов Azure код попадает в промежуточное ПО microcache
и затем возвращается к промежуточному программному обеспечению ipcheck
.
ipcheck.js
if (req.query.skipGeo || req.cookies.geoCheck || isBot(req)) {
console.log(`Cookie Present \n`)
let hour = 3600000
res.cookie('geoCheck', 'passed', { maxAge: 365 * 24 * hour })
next()
} else {
console.log(`Checking against mmdb \n`)
const isValidIP = await user.hasValidIp(req.headers['x-forwarded-for'] || req.connection.remoteAddress)
process.env.isValidIP = isValidIP
if (!isValidIP) {
console.log(`Geo Block \n`)
res.status(307).sendFile(path.resolve('public/geo_block.html'))
} else {
console.log(`Success \n`)
next()
}
}
microcache.js
return config.useMicroCache.get() && `${req.hostname}${req.originalUrl}` // useMicroCache is a bool val set based on env.
redirection.js
const params = req.params
let lang = params.lang
const site = utils.user.currentSite(req)
if (!req.originalUrl.includes('api')) {
if (!validLanguage(site, lang)) {
lang = req.cookies.lang && validLanguage(site, req.cookies.lang) ? req.cookies.lang : site.languages.default
config.useMicroCache.set(false)
res.redirect(301, `/${lang}${req.originalUrl}`)
return
} else if (lang !== req.cookies.lang) {
config.useMicroCache.set(false)
} else {
config.useMicroCache.set(true)
}
if (!isLowerCase(req.path)) {
let parsedUrl = url.parse(req.originalUrl)
parsedUrl.pathname = parsedUrl.pathname.toLowerCase()
res.redirect(301, url.format(parsedUrl))
return
}
}
next()