Я пытаюсь перенаправить трафик на конкретный пул на основе кода страны пользователя после поиска IP-адреса.
Он прекрасно работает локально, но не работает при развертывании в Netlify.
export default defineNuxtRouteMiddleware(async (to, from) => {
const targetPathDe = '/de-de'
const targetPathEn = '/de-en'
// Prevent middleware from redirecting if already on the target path
if (to.path === targetPathDe || to.path === targetPathEn) {
return
}
const ipApiUrl = 'http://ip-api.com/json/?fields=countryCode'
try {
// Use native fetch to get IP data
const response = await fetch(ipApiUrl)
const ipData = await response.json()
// Check the country code from IP data
if (ipData.countryCode === 'DE') {
return navigateTo(targetPathDe)
} else {
return navigateTo(targetPathEn)
}
} catch (error) {
console.error('Error fetching IP data:', error)
return navigateTo(targetPathEn)
}
})
Локально я использую npm run dev
, а Netlify — npm run build
.
🤔 А знаете ли вы, что...
Vue.js можно использовать для создания плагинов и расширений для собственных проектов.
ОП рассматривает возможность использования функции края геолокации на данный момент.
Это проще реализовать и, возможно, точнее!
Судя по тому, что я вижу на сайте ip-api.com, для определения страны используется IP-адрес вызывающего абонента. В этом случае, если вы используете эту серверную часть, этот IP-адрес всегда будет IP-адресом работающего сервера, а не вашего клиента. Это будет работать локально, поскольку ваш IP-адрес является одновременно пользователем и сервером.