1. 程式人生 > 其它 >nuxt.js和vue.js

nuxt.js和vue.js

nuxt.js是基於 Vue.js 建立的服務端渲染(ssr)應用框架。

一般使用nuxt.js多是用來解決seo的問題。

nuxt.js與vue.js的區別有:

  路由:

     nuxt.js是按照pages資料夾的目錄結構來自動生成路由。

     vue.js則是需要在router/index.js中手動配置路由。

  入口頁面:

     nuxt.js的入口頁面是layout/default.vue。

     vue.js的入口頁面為src/App.vue。

  pack配置  

     nuxt內建webpack,允許根據服務端需求,在 nuxt.config.js 中的build屬性自定義構建webpack的配置,覆蓋預設配置。

     vue關於webpack的配置存放在build資料夾下。

nuxt.js不一定一直執行在客戶端(儲存方面建議cookie),vue.js則是一直運行於客戶端。

nuxt.js相比於vue.js優點在於  便於seo 和 更利於首屏載入。

生命週期:

nuxt.js對於vue.js的生命週期函式進行了一部分拓展。新增了

  middleware(){}, // 服務端

  validate() {}, // 服務端

  asyncData() {}, // 服務端

  fetch() {}, // store資料載入

  beforeCreate() {}, // 服務端和客戶端都會執行

  created() {}, // 服務端和客戶端都會執行

vue.js的生命週期鉤子中只有beforeCreate(){}和created(){}會在瀏覽器和服務端均被呼叫,其他只有在瀏覽器端被呼叫

nuxt.js內建webpack,

路由:

nuxt根據pages目錄結構生成路由配置,非同步資料asyncData,必須要頁面元件才能呼叫asyncData,asyncData傳入context引數,可以獲取一些資訊

export default {
  asyncData(ctx){
    ctx.app   // 根例項
    ctx.route   // 路由例項
    ctx.params   // 路由引數
    ctx.query   // 路由問號後的引數
    ctx.error   // 錯誤處理方法
  }
}

使用這個方法時要注意,如果由於伺服器或api錯誤導致無法渲染,就要做好容錯機制,可以使用context.error方法

async asyncData(ctx){
  try {
    throw new Error()
  } catch {
    ctx.error( {statusCode: 500, message: '伺服器開小差了~'} ) // 這裡的statusCode引數必須是http狀態碼
  }
}

此時,錯誤頁可以通過/layout/error.vue自定義

middleware()

在特定頁面實戰中介軟體使用axios請求資料

  nuxt預設安裝axios,所以只要安裝proxy即可

npm install @nuxtjs/proxy

  安裝之後需要在nuxt.config.js中配置

export default {
  modules: [
    '@nuxtjs/axios',
    '@nuxtjs/proxy'
  ],
  proxy: {
    './api': {
      target: 'http://www.xxx.com',
      changeOrigin: true,
      pathRewrite: {
        '^/api': ''
      }
    }
  }
}