中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

NUXT SSR初級入門的示例分析

發布時間:2021-08-03 09:32:28 來源:億速云 閱讀:178 作者:小新 欄目:web開發

這篇文章給大家分享的是有關NUXT SSR初級入門的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

nuxt 是基于 vue 開發的一個應用框架,最常用的就是拿來做 ssr。那么什么是 ssr 呢,這就要提及一個相對的概念:csr。

CSR & SSR

web網頁開發從之前的 jsp,php 轉向現在的三大框架 angular react vue,其實就是從 csr 到 ssr 的轉變,即從服務端渲染轉而變為客戶端渲染。

有使用經驗的大概知道,例如之前的 php 開發,是將網頁內容和服務端代碼邏輯寫在一起的,在客戶端請求時,服務端經過 php 引擎的渲染生成完整的 html 頁面再返回給客戶端,這種渲染出的頁面在瀏覽器中右鍵查看源代碼都是能看見 頁面全部的 html 代碼的。而客戶端渲染如 vue,返回的就只有一個掛在 app 節點的 html文件和一個 js 文件,頁面的內容都是在客戶端的 js 渲染生成的。所以 渲染 html 文本所在的位置就是 CSR(客戶端渲染) 和 SSR(服務端渲染) 最本質的區分 。

既然web開發從 ssr 過渡到了 csr,那我們為什么又再去做 ssr 呢,這就要涉及到雙方的優缺了:

SSR:

優點:

便于 SEO,渲染完整的 html 更利于搜索引擎的抓取。

頁面加載的白屏時間短(幾乎沒有)。

缺點:

每加載一個頁面都要對服務器發起一次請求,服務器的渲染負荷重,請求緩慢。

每次加載都會刷新頁面,即使只是頁面中的小區域需要改變。

CSR:

優點:

頁面具有優秀的性能,更利于頁面交互。

缺點:

不利于SEO

首頁初始化加載白屏時間長。

在我們普遍使用三大框架的今天,如果我們的頁面需要對 SEO 的良好支持,這就需要我們做 ssr 了。 NUXT 項目的初始化

使用以下命令調用腳手架生成項目,腳手架選項按需選擇就可以了:

npx create-nuxt-app <項目名>

生成的目錄結構如下:

NUXT SSR初級入門的示例分析 

.nuxt

運行緩存目錄

assets

資源目錄,用于存放如 css 文件,js 文件,圖片

components

組件目錄,用于存放 vue 組件

layouts

布局目錄,用于設置布局,文件名即為布局名

在 pages 目錄里的組件可以通過 layout 屬性指定布局組件,不指定默認為 default。

布局組件中使用 <nuxt /> 標簽指定應用布局時,page 組件所在的位置。

middleware

中間件目錄,用于設置中間件函數,文件名即為中間件名

在 pages 目錄里的組件可以通過 middleware 屬性指定中間件函數,中間件會在組件渲染前執行

pages

頁面目錄,用于設置路由頁面,目錄下的 vue 文件會自動生成相應的路由配置

如以下目錄結構對應的配置:

pages/
--| _slug/
-----| comments.vue
-----| index.vue
--| users/
-----| _id.vue
--| index.vue

router: {
 routes: [
  {
   name: 'index',
   path: '/',
   component: 'pages/index.vue'
  },
  {
   name: 'users-id',
   path: '/users/:id?',
   component: 'pages/users/_id.vue'
  },
  {
   name: 'slug',
   path: '/:slug',
   component: 'pages/_slug/index.vue'
  },
  {
   name: 'slug-comments',
   path: '/:slug/comments',
   component: 'pages/_slug/comments.vue'
  }
 ]
}

nuxt 中使用 <nuxt-link> 代替了 <router-link>

nuxt 會為 page 組件提供額外的配置項,常用到的如下:

  • layout 指定當前頁面使用的布局(layouts 根目錄下的布局文件)。

  • validate 校驗方法用于校驗動態路由的參數。

  • middleware 指定頁面的中間件函數,中間件函數會在頁面渲染之前被調用,也可以指定為middleware文件夾內的中間件名。

  • asyncData 支持異步數據處理,拿來為 page 組件請求異步數據,返回對象中的 data 會覆蓋到組件的 data 中。

  • fetch 用于在渲染頁面之前獲取數據填充應用的狀態樹(store)。不同的是 fetch 方法不會設置組件的數據。

plugins

插件目錄,用于引入第三方模塊,

如 element-ui.js:

import Vue from 'vue'
import Element from 'element-ui'
import locale from 'element-ui/lib/locale/lang/en'

Vue.use(Element, { locale })

然后可以在 nuxt.config.js 中的 plugins 中引入:

plugins: [
  '@/plugins/element-ui'
 ],

server

服務端目錄

static

靜態文件目錄

store

vuex目錄,index.js 為主文件,其他文件默認會配置成 module 模塊,默認啟用 namespace。

文件形式為:

export const state = () => ({
  // state
})

export const actions = {
  // actions
}

export const mutations = {
  // mutations
}

在 index.js 的 actions 中可以配置 nuxtServerInit,可以用來將數據從服務端傳到客戶端。

具體使用

創建項目如下:

NUXT SSR初級入門的示例分析

運行初始項目,效果如下:

NUXT SSR初級入門的示例分析 

使用布局

在 layouts 下新建文件 myLayout.vue

<template>
 <div>
  <header>
   <h3>I am header</h3>
  </header>
  <main>
   <nuxt />
  </main>
  <footer>
   <h3>I am footer</h3>
  </footer>
 </div>
</template>

然后我們在 pages 下新建文件 layoutDemo.vue

<template>
 <div>
  <h2>I am layout demo</h2>
 </div>
</template>

<script>
export default {
 layout: 'myLayout'
}
</script>

訪問 localhost:3000/layoutDemo,布局效果如下:

NUXT SSR初級入門的示例分析 

使用中間件

例如我們實現一個未登錄攔截跳轉的中間件:

在 middleware 中新建 auth.js

export default function (ctx) {
 // eslint-disable-next-line no-constant-condition
 if (true) { // ctx 判斷得到未登錄
  ctx.redirect({ path: '/' })
 }
}

再在 layoutDemo.vue 中加上 middleware: 'auth' ,這樣訪問該頁面就會攔截跳轉回主頁面。

用 asyncData 實現 ssr

我們再在 pages 中新建頁面 ssr1.vue

<template>
 <div>
  <ul>
   <li v-for="item of list1" :key="item">
    {{ item }}
   </li>
  </ul>
  <ul >
   <li v-for="item of list2" :key="item">
    {{ item }}
   </li>
  </ul>
 </div>
</template>

<script>
export default {
 layout: 'myLayout',
 data () {
  return {
   list1: []
  }
 },
 async created () {
  const { status, data: { list } } = await this.$axios.get('/list')
  if (status === 200) {
   this.list = list
  }
 },
 async asyncDate () {
  const { status, data: { list } } = await this.$axios.get('/list')
  if (status === 200) {
   return {
    list2: list
   }
  }
 }
}
</script>

這里我們 list1 是用傳統的 vue 方式獲取異步數據, list2 用 asyncData 獲取異步數據

然后我們在 server 中寫接口,應為 node 還是采用 require 的方式,如果我們想使用 import 的方式,可以安裝 babel-cli 和 babel-preset-env , 新建配置文件 .babelrc:

{
 "presets": ["env"]
}

然后在 package.json 里將 dev 命令加上后綴 --exec babel-node , server 中書寫 node 就可以使用 import 了。

然后安裝 koa-router,在 index.js 里加入以下代碼:

import Router from 'koa-router'

// 以下代碼加在 start 函數內的 原有的 app.use 之前
const router = new Router()
router.get('/list', (ctx) => {
ctx.body = {
 list: ['a', 'b', 'c']
}
})
app.use(router.routes()).use(router.allowedMethods())

然后訪問頁面,兩個列表都正常渲染

NUXT SSR初級入門的示例分析

我們右鍵查看源代碼:

NUXT SSR初級入門的示例分析

list2 通過 asyncData 的方式實現了 ssr。

使用 nuxtServerInit 實現 ssr

我們新建頁面 ssr2.vue

<template>
 <div>
  <ul>
   <li v-for="item of $store.state.list" :key="item">
    {{ item }}
   </li>
  </ul>
 </div>
</template>

<script>
export default {
 layout: 'myLayout'
}
</script>

然后在 store 中新建 index.js

export const state = () => ({
 list: []
})

export const mutations = {
 setList (state, value) {
  state.list = value
 }
}

export const actions = {
 async nuxtServerInit ({ commit }, { app }) {
  const { status, data: { list } } = await this.$axios.get('/list')
  if (status === 200) {
   commit('setList', list)
  }
 }
}

重新 npm run dev, 訪問 localhost:3000/ssr2

NUXT SSR初級入門的示例分析

查看源代碼,也正確渲染

NUXT SSR初級入門的示例分析

感謝各位的閱讀!關于“NUXT SSR初級入門的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

苏尼特右旗| 靖州| 泸西县| 南丰县| 武城县| 铜鼓县| 岑巩县| 遵义市| 龙海市| 崇礼县| 榆林市| 宁阳县| 金湖县| 遵义市| 彭水| 沂南县| 荔波县| 花莲县| 石狮市| 临湘市| 邛崃市| 台湾省| 长治县| 和龙市| 麻栗坡县| 留坝县| 东兴市| 筠连县| 益阳市| 凤凰县| 缙云县| 巨鹿县| 丹寨县| 长泰县| 普兰县| 乐平市| 长治县| 信阳市| 澳门| 上林县| 宝清县|