с baseUrl. Суть в том, что все это болтается в докерах, и baseUrl указан для контейнера, чтобы ssr запросы работали правильно. Однако в простой функции loadVillages должно работать без baseUrl а просто /api/bla-bla потому что на фронте api это просто location того же nginx сервера. Как сделать чтобы это все было нормально и без костылей?
как отдельный вариант - вывести все запросы в middleware и там логировать пути
Мне не надо логировать. Логировать это не задача фронта. Мне нужно нормально распределитть, чтобы ssr запросы уходили в условно http://nginx:8080 а с фронта запросы уходили на local.domain.com
логировать в плане логику накрутить) не так выразился
Тоже лишний код, так как на бою, в кубере они будут находиться в разных подах, и там не будет этой проблемы, просто все запросы и из ssr и из фронат будут уходить на сторонний для него ресурс. На локали просто очень не удобно это все получается
Доброго дня всем. Вчера вот обращался по проблеме. Решил временно так. Но мне все равно кажется дичью вот это. Две функции, практически идентичные, но одна на фронте, другая на SSR. Костыль c setBaseUrl потому что с фронта мы реально можем просто как /api/... обратиться а с бэка это соседний контейнер, например http://nginx:8080 Эта дичь с одинаковым fecth и фронтовым методом как то можно нормально решить?
Как тебе вариант с выносом запроса к axios в отдельную функцию, принимающую axios и флаг "ssr-не ssr", которая будет дописывать baseUrl уже на месте (без использования метода setBaseUrl)? А, и такое использование fetch - deprecated с версии 2.12. К тому же ты можешь разрешить фетчить только на стороне клиента : за это отвечает свойство экземпляра fetchOnServer
1. Вариант наверное. Надо только флаг найти ssr и не ssr. 2. Что то не понял, что там депрекейтед https://nuxtjs.org/docs/2.x/features/data-fetching. Какое использование?
Четвертый абзац сверху по твоей же ссылке😄
новый fetch можно вызывать this.$fetch
Да, это видел. Но это не было решением из за разных точек входа baseUrl
Спасибо в любом случае, теперь чтонибудь придумаю
process.client/server
А у тебя обращение к this в данном случае точно происходит корректно? Просто контекст ssr, в консоли ошибок не увидишь, а такое использование fetch с контекстом, насколько помню, не подразумевает использование this Я предложу, по итогу, вот что : Откажись от mounted, используй либо asyncData, либо fetch в новой нотации (2.12+). По свойству process.server ты сможешь понять какое у тебя окружение и нужен ли baseUrl (но я бы посоветовал все равно выставить fetchOnServer: false и посмотреть решит ли это твою проблему)
Насчет корректно, тут идиологически как то не правильно все. Но как ни странно это работает и на ssr стороне и на mounted. Насчет использования такого this в fetch это прям в документации написан такой пример, ниже скину. В консоли ошибки ssr есть, и в консоли сборщика в докер контейнере и в бразуерной, он если что не так выкидывает в консоль браузера как vueSsr ошибку. За подсказки спасибо. Про асинк дата я уже думал, что она тоже устарела))) Но честно говоря, не понимаю тогда отличий fetch от AsyncData кроме контекста
https://nuxtjs.org/blog/understanding-how-fetch-works-in-nuxt-2-12
Да, то что там this доступен компонента это я понял. Просто например метод loadVillages внутри fetch не работает, говорит, что метода не существует
Старый fetch слабо отличался от middleware скорее (если речь об использовании в конпонентах), про новый такого совсем не скажешь asyncData отличается тем, что может вернуть объект, который будет смержен с содержимым data()
Внутри fetch с контекстом он офкорз не будет работать
Странно что к переменным дает доступ, но, скорее, это ошибка подсветки синтаксиса
Я без контекста пробовал, не работал метод. А то я в нем бы обыграл эту пробелму с адресом и уже не стал бы дублить. AsyncData да мержит, но оно доступно еще только в page а не в компонентах. МОжно конечно через пропсы решить эту проблему. Но мне как то fetch понравился больше. Спасибо что ткнули носом в депрекейтед контекст, я что-то как то проглядел
Дает и работает. К тому что в data хоть с контекстом, хоть без дает. А вот к methods не дает.
Пожалуйста) У нукста так себе документация, есчестно Неудивительно что проглядел
Сейчас уже многим лучше. Я 4 года назад делал проект на наксте. Тогда помоему даже fetch не было. Была только asyncData. Вот решили взять на новом проекте для генерации статики. Но я смотрю и SSR режим нормально работает сейчас. В той старой 4х летней давности были с SSR проблемы. То тупило, то в бесконечную загрузку падало. Хотя в бесконечную, у меня в dev режиме и сейчас падает переодически, не могу понять почему
Nuxt в dev режиме течет, там есть какие-то хаки для более продолжительной жизни 😊
Постоянно эта хрень.
В общем работает. А есть какой то способ вот этот самый baseUrl из конфига накста достать? Или хотябы dotenv прикрутить.
https://nuxtjs.org/docs/2.x/directory-structure/nuxt-config#env Такая запись для fetch, кстати, в 2.12+ не имеет особого смысла, если ты создал функцию в methods исключительно из желания иметь возможность обновить данные вручную уже после рендера страницы : fetch можно будет в дальнейшем вызвать как обычную функцию по this.$fetch()
вызов this.$fetch не читаемый. Не понятно, что там фетчится. А вызов this.loadVillages уже сразу говорит о том, что там загружается
Обсуждают сегодня