Nuxt3 SSR 踩坑記錄

-什么是SSR-
  • 【服務(wù)端渲染】:互聯(lián)網(wǎng)早期琼开,用戶使用瀏覽器瀏覽的都是一些沒有復(fù)雜邏輯的、簡單的頁面揍瑟,這些頁面都是在后端將html拼接好的然后將之返回給前端完整的html文件蹂窖,瀏覽器拿到這個(gè)html文件之后就可以直接解析展示了智听,而這也就是所謂的服務(wù)器端渲染了
  • 【客戶端渲染】:后端不提供完整的html頁面,而是提供一些api使得前端可以獲取到j(luò)son數(shù)據(jù)怜珍,然后前端拿到j(luò)son數(shù)據(jù)之后再在前端進(jìn)行html頁面的拼接端蛆,然后展示在瀏覽器上,這就是所謂的客戶端渲染了
-如何判斷一個(gè)網(wǎng)頁是不是SSR-
  • 【服務(wù)端渲染】:鼠標(biāo)右鍵查看源代碼酥泛,在頁面中看到的內(nèi)容在源代碼中幾乎都能查看到今豆,則是服務(wù)端渲染得到的
  • 【客戶端渲染】:鼠標(biāo)右鍵查看源代碼,有大量的內(nèi)容在頁面上可以看到柔袁,但是源碼中卻找不到呆躲,則是客戶端渲染得到的
-為什么要使用SSR-
  • 利于機(jī)器人獲取信息:爬蟲程序等,典型的捶索,搜索引擎爬蟲
  • 如:搜索引擎:SEO
  • 如:社交媒體:抓取頁面內(nèi)容展示縮略信息(比如 Twitter 卡片等)
-Nuxt3 坑點(diǎn)--1-
  • pages/下的路由文件不支持大小寫
  • 只能支持橫桿隔開了路由插掂,比如:aaa-bbb.vue
-Nuxt3 坑點(diǎn)--2-
  • 自動(dòng)生成的 .nuxt/ 不一定能自動(dòng)更新的問題
  • nuxt 一些可以直接調(diào)的功能都是自動(dòng)生成在 .nuxt/ 目錄下的,有時(shí)候需要重新 npm install 才行
-Nuxt3 坑點(diǎn)--3-
  • server/api/ 目錄下的服務(wù)會(huì)直接訪問
  • 這導(dǎo)致凡事寫在這目錄下的接口都能被直接訪問腥例,這并不安全
  • 這需要對 nuxt 的 api 層做一層安全控制辅甥,否則盡量少把接口寫在 server/api/ 下
-Nuxt3 坑點(diǎn)--4-
  • composables/ 目錄不支持層級
  • 我們把自定義的 composable 寫在這個(gè) composables/ 目錄下的話,nuxt3會(huì)自動(dòng)編譯到.nuxt/目錄下燎竖,我們調(diào)用的時(shí)候就不需要使用 import
-Nuxt3 坑點(diǎn)--5-
  • 前端如果有多個(gè)有依賴性的接口請求需要控制在服務(wù)端發(fā)起璃弄,這會(huì)比較麻煩
  • Nuxt3 提供的 useAsyncData() 函數(shù)雖然可以控制在服務(wù)端請求多個(gè)接口,但是目前有bug
  • useAsyncData()目前的bug是底瓣,如果在里面寫了awiat谢揪,那么接下來的一個(gè)Promise請求中就只能直接使用fetch()去發(fā)起,如果想把這個(gè)fetch()封裝在一個(gè)函數(shù)里捐凭,nuxt3就不會(huì)去跑著個(gè)請求
  • useAsyncData()一個(gè)函數(shù)中只能使用一次拨扶,如果一個(gè)函數(shù)中使用了多次,那么除了第一個(gè)會(huì)在服務(wù)端去跑茁肠,其余的都會(huì)在客戶端發(fā)起患民,在瀏覽器的調(diào)試工具的network中可以看到這些接口
// 案例

function useApiData<T> ({ url, method = 'GET', query = {}, body = {} }: ApiDataParams):Promise<T> {
  return $fetch(url, {
    baseURL: 'http://localhost:3000',
    onRequest ({ options }) {
      options.headers = options.headers || {}
      options.method = method
      if (method === 'GET') {
        options.query = query
      } else if (method === 'POST') {
        options.body = body
      }
    },
    onResponse ({ response }) {
      return response._data
    }
  })
}

export default async function useCustom(){
  // 這些 useAsyncData 里的會(huì)在服務(wù)端運(yùn)行,所以不要在這里做任何的客戶端的操作垦梆,會(huì)獲取不到 window或document這類只有瀏覽器才有的對象
  const { data }: any = await useAsyncData(async () => {
    const res1 = await useApiData({
        url: '/api/list',
        method: 'GET',
        query: {
          searchName
        }
    })

    const res2 = await $fetch('/api/list2', {
      baseURL: 'http://localhost:3000',
      onRequest ({ options }) {
        options.headers = options.headers || {}
        options.method = 'GET'
        options.query = { code: res2.code }
      },
      onResponse ({ response }) {
        return response._data
      }
    })

  })

  // 下面這些就可以下需要在客戶端進(jìn)行的操作了
  // ... ...

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匹颤,一起剝皮案震驚了整個(gè)濱河市仅孩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌印蓖,老刑警劉巖辽慕,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赦肃,居然都是意外死亡溅蛉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門他宛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來船侧,“玉大人,你說我怎么就攤上這事厅各【盗茫” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵队塘,是天一觀的道長袁梗。 經(jīng)常有香客問我,道長人灼,這世上最難降的妖魔是什么围段? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任顾翼,我火速辦了婚禮投放,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘适贸。我一直安慰自己灸芳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布拜姿。 她就那樣靜靜地躺著烙样,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蕊肥。 梳的紋絲不亂的頭發(fā)上谒获,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音壁却,去河邊找鬼批狱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛展东,可吹牛的內(nèi)容都是我干的赔硫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盐肃,長吁一口氣:“原來是場噩夢啊……” “哼爪膊!你這毒婦竟也來了权悟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤推盛,失蹤者是張志新(化名)和其女友劉穎峦阁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耘成,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拇派,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凿跳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片件豌。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖控嗜,靈堂內(nèi)的尸體忽然破棺而出茧彤,到底是詐尸還是另有隱情,我是刑警寧澤疆栏,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布曾掂,位于F島的核電站,受9級特大地震影響壁顶,放射性物質(zhì)發(fā)生泄漏珠洗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一若专、第九天 我趴在偏房一處隱蔽的房頂上張望许蓖。 院中可真熱鬧,春花似錦调衰、人聲如沸膊爪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽米酬。三九已至,卻和暖如春趋箩,著一層夾襖步出監(jiān)牢的瞬間赃额,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工叫确, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跳芳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓启妹,卻偏偏與公主長得像筛严,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子饶米,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容