Рекомендации по извлечению на стороне сервера Nuxt и внутренним ссылкам
Я хотел бы всегда получать данные на стороне сервера (чтобы их нельзя было прочитать с вкладки сети)
Когда страница обновляется (или загружается в первый раз), возвращается
true
и на вкладке сети ничего не видно.
async asyncData({ params, $axios }) {
console.log(process.server)
const { id } = params;
const url = `api/post/${params.id}`
const post = await $axios.$get(url);
return { post };
}
Однако, когда я попытался перейти по внутренней ссылке, используя
router-link
или всегда заканчивайте выборкой на стороне клиента.
process.server
возвращается
false
а запрос / ответ можно увидеть на вкладке сети.
Единственное решение, которое я придумал, использовать вместо внутренних ссылок, благодаря тому, что эта страница загружается, и мы можем получать данные на стороне сервера.
Документы Nuxt говорят, что всегда используйте
nuxt-link
вместо внутренних ссылок, но
<a>
можно использовать для внешних ссылок. Поэтому мне было интересно, каковы недостатки, если мы используем внутренние ссылки (просто для того, чтобы обновить страницу и убедиться, что загрузка выполняется на стороне сервера)
Или есть лучший способ всегда получать серверную часть при навигации?
1 ответ
Вот как я с этим справляюсь и использую
nuxt-link
повсюду.
Использоватьfetch
крючок, то он вызывается на обоих.
async fetch() {
this.getItems()
},
Кроме того, если вы хотите, вы можете напрямую вызывать серверный код через
this.$root.context.ssrContext
, что было бы похоже на то, что вы делаете, если используете nuxtServerInit в магазинах.
async fetch() {
if (process.server) {
let items = []
if (this.isset(this.$root, 'context.ssrContext.req.thingsModel')) {
items = this.$root.context.ssrContext.req.cache.get('things', [])
if (!items.length) {
items = await this.$root.context.ssrContext.req.thingsModel.get(
this.limit
)
items = this.$copy(items)
this.$root.context.ssrContext.req.cache.put('things', items, 60000 * 60)
}
}
this.items = items
} else {
this.getItems() // would be an ajax call to populate items
}
},