nuxt.js探究

為什么使用nuxt.js?
vue單頁(yè)面應(yīng)用渲染是從服務(wù)器獲取所需js体斩,在客戶端將其解析生成html掛載于
id為app的DOM元素上猜欺,這樣會(huì)存在兩大問(wèn)題。
1简十、由于資源請(qǐng)求量大檬某,造成網(wǎng)站首屏加載緩慢撬腾,不利于用戶體驗(yàn)螟蝙。
2、由于頁(yè)面內(nèi)容通過(guò)js插入民傻,對(duì)于內(nèi)容性網(wǎng)站來(lái)說(shuō)胰默,搜索引擎無(wú)法抓取網(wǎng)站內(nèi)容,不利于SEO漓踢。
Nuxt.js 是一個(gè)基于Vue.js的通用應(yīng)用框架牵署,預(yù)設(shè)了利用Vue.js開(kāi)發(fā)服務(wù)端渲染的應(yīng)用所需要的各種配置⌒耄可以將html在服務(wù)端渲染奴迅,合成完整的html文件再輸出到瀏覽器。
1挺据、使用 starter 模板
這里項(xiàng)目初始化取具,直接使用官網(wǎng)的Nuxt提供的starter的模板

# 安裝 vue-cli
npm install -g vue-cli
# 初始化項(xiàng)目
vue init nuxt-community/starter-template nuxt-ssr-demo
# 安裝依賴
cd nuxt-ssr-demo
npm install # Or yarn install
# 啟動(dòng)本地服務(wù)
npm run dev

訪問(wèn) http://localhost:3000 脖隶,現(xiàn)在我們來(lái)看下初始化好的項(xiàng)目目錄

├── assets                      css,圖片等資源都在這
├── components                  組件相關(guān)
├── layouts                     路由布局
├── middleware                  中間件
├── pages                       路由頁(yè)面
├── static                      靜態(tài)資源
├── pages                       路由頁(yè)面
├── store                       vuex 相關(guān)
├── nuxt.config.js              nuxt 相關(guān)配置
├── package.json                依賴相關(guān)
├── README.md                   項(xiàng)目介紹

注釋:為什么沒(méi)有 router 路由相關(guān)的文件暇检?莫慌产阱,Nuxt 會(huì)幫你將 pages 下面的文件自動(dòng)解析成路由。所以在接下來(lái)的開(kāi)發(fā)中块仆,記得別瞎在 pages 下面新增文件构蹬,pages 下面的每一個(gè) vue 文件就是一個(gè)路由。
2悔据、封裝axios
首先在根目錄下面新建 service 目錄庄敛,在其下面建立 config.js 和 index.js 兩個(gè)文件,下面的代碼僅供參考科汗,如果你的項(xiàng)目還需要做額外的一些配置铐姚,可自行進(jìn)行拓展
config.js

import http from 'http'
import https from 'https'

export default {
  // 自定義的請(qǐng)求頭
  headers: {
    post: {
      'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
    },
    'X-Requested-With': 'XMLHttpRequest'
  },
  // 超時(shí)設(shè)置
  timeout: 10000,
  // 跨域是否帶Token
  withCredentials: true,
  // 響應(yīng)的數(shù)據(jù)格式 json / blob /document /arraybuffer / text / stream
  responseType: 'json',
  // 用于node.js
  httpAgent: new http.Agent({
    keepAlive: true
  }),
  httpsAgent: new https.Agent({
    keepAlive: true
  })
}

index.js

import axios from 'axios'
import qs from 'qs'
import config from './config'

const service = axios.create(config)

// POST 傳參序列化
service.interceptors.request.use(
  config => {
    if (config.method === 'post') config.data = qs.stringify(config.data)
    return config
  },
  error => {
    return Promise.reject(error)
  }
)
// 返回結(jié)果處理
service.interceptors.response.use(
  res => {
    return res.data
  },
  error => {
    return Promise.reject(error)
  }
)

export default {
  // post 方法
  post (url, data) {
    console.log('post request url', url)
    return service({
      method: 'post',
      url,
      params: data
    })
  },
  // get 方法
  get (url, data) {
    console.log('get request url', url)
    return service({
      method: 'get',
      url,
      params: data
    })
  },
  // delete 方法
  delete (url, data) {
    console.log('delete request url', url)
    return service({
      methods: 'delete',
      url,
      params: data
    })
  }
}

跨域的處理:
vue中可以處理跨域 webpack中的proxyTable,但是在Nuxt中沒(méi)有proxyTable這個(gè)東西肛捍,但是可以用直接通過(guò)配置 http-proxy-middleware 來(lái)處理跨域隐绵。更幸運(yùn)的是 Nuxt 官方提供了兩個(gè)包來(lái)處理 axios 跨域問(wèn)題。

npm i @nuxtjs/axios @nuxtjs/proxy -D

然后在 nuxt.config.js 文件里進(jìn)行配置

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

需要注意的拙毫,因?yàn)槭欠?wù)器端渲染依许,我的是判斷是路由跳轉(zhuǎn)還是axios請(qǐng)求,所以:

// 判斷是路由跳轉(zhuǎn)還是 axios 請(qǐng)求
if (process.server) {
  config.baseURL = `http://${process.env.HOST || 'localhost'}:${process.env.PORT || 3000}`
}

未完待續(xù).....

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缀蹄,一起剝皮案震驚了整個(gè)濱河市峭跳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缺前,老刑警劉巖蛀醉,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異衅码,居然都是意外死亡拯刁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)逝段,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)垛玻,“玉大人,你說(shuō)我怎么就攤上這事奶躯≈阕” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵嘹黔,是天一觀的道長(zhǎng)账嚎。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么郭蕉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任乏悄,我火速辦了婚禮,結(jié)果婚禮上恳不,老公的妹妹穿的比我還像新娘檩小。我一直安慰自己,他們只是感情好烟勋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布规求。 她就那樣靜靜地躺著,像睡著了一般卵惦。 火紅的嫁衣襯著肌膚如雪阻肿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天沮尿,我揣著相機(jī)與錄音丛塌,去河邊找鬼。 笑死畜疾,一個(gè)胖子當(dāng)著我的面吹牛赴邻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啡捶,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼姥敛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了瞎暑?” 一聲冷哼從身側(cè)響起彤敛,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎了赌,沒(méi)想到半個(gè)月后墨榄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勿她,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年袄秩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫂拴。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡播揪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筒狠,到底是詐尸還是另有隱情,我是刑警寧澤箱沦,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布辩恼,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏灶伊。R本人自食惡果不足惜疆前,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聘萨。 院中可真熱鬧竹椒,春花似錦、人聲如沸米辐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)翘贮。三九已至赊窥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狸页,已是汗流浹背锨能。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芍耘,地道東北人址遇。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像斋竞,于是被迫代替她去往敵國(guó)和親傲隶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355