nuxt+node服務端渲染自動生成多個頁面

概況

附上nuxt官方文檔node API文檔
接觸nuxt兩個多月耘纱,基本上對于服務端的渲染了解得七七八八帘靡,首先來看一下nuxt的目錄結構

目錄

├─assets            // 靜態(tài)資源文件
├─components        // 組件
├─layouts           // 布局文件
├─middleware        // 中間件
├─pages             // 頁面目錄文件
├─plugins           // 插件
├─server            // 這個可以作為啟動項目文件
├─static            // 靜態(tài)文件
├─store             // 組織應用的 Vuex 狀態(tài)樹
├─nuxt.config.js    // 配置文件
└─package.json      // 依賴包等

nuxt的目錄結構很清晰公荧,看名字也大概能夠知道雅潭。使用nuxt和單純使用vue很大的一個區(qū)別就是不需要你手動注冊路由,你只需要把你的文件在pages目錄下面創(chuàng)建好信夫,nuxt編譯的時候就會自動幫你注冊好路由梭依。編譯好的項目下面有一個文件夾.nuxt,可以看到router.js文件呼伸。

image.png

可以看到是webpack打包的時候對不同模塊進行代碼分割,實現(xiàn)懶加載钝尸。(順便說一下 nuxt 內置了 webpack括享,省去了配置 webpack 的步驟,nuxt 會根據(jù)配置打包對應的文件)


image.png

說到這里大家應該就明白珍促,如果你需要配置路由铃辖,就必須創(chuàng)建對應的.vue文件,那么有一種情況踢星,對于有很多頻道或者說是二級路由來說澳叉,難道需要手動創(chuàng)建一個一個文件然后復制粘貼嗎?
看一下我目前這個項目的頁面文件沐悦,實在是太多了成洗。再者就是后期可能還會增加,目前已經(jīng)有了五十多個二級目錄藏否,想了一下還是用代碼來創(chuàng)建文件瓶殃,一勞永逸,何樂不為副签。

node創(chuàng)建多個組件文件

基于node + express集成的服務器端遥椿,以下代碼寫在server/index.js下面,在我們 new Nuxt() 之前需要把文件創(chuàng)建好淆储,這樣才可以自動生成路由冠场。

// 1. 引入fs文件系統(tǒng)
const fs = require('fs');

// 2. 讀取一個模板內容
var dataContent = await fs.readFileSync('assets/script/modal.vue')

// 3. 讀取json文件,(這個其實就是數(shù)據(jù)本砰,一般是后端接口提供)
const fileData = require('../assets/script/fileData.json')

for (const item of fileData.data) {
    for (const file of item.files) {

        var path = `${item.folder}/${file.filename}.vue`;

        // 1. 判斷文件夾是否存在碴裙,不存在創(chuàng)建
        var checkDir = fs.existsSync('pages/'+item.folder);
        if(!checkDir){
            await mkdir('pages/'+item.folder);
        }

        // 2. 判斷文件是否存在,不存在創(chuàng)建
        var checkFile = fs.existsSync('pages/'+path);
        if(!checkFile){

            // 3. 替換文件里面的內容
            var content = dataContent.toString()
            content = content.replace(/頻道id/g,file.id)
            .replace(/二級id/g,file.lid)
            .replace(/標題/g,file.title)
            .replace(/關鍵字/g,file.keywords)
            .replace(/描述/g,file.description)
            .replace(/頻道鏈接/g,file.url)
            
            // 4. 創(chuàng)建并寫入文件
            fs.writeFileSync('pages/'+path, content);
        }
    }
  }

modal.vue模板文件

<template>
    <list id="頻道id" lid="二級id"></list>
</template>

<script>
    export default {
        head() {
            return this.$seo('標題', '關鍵字', '描述', [{}],'頻道鏈接')
        },
        components: {
            list: () => import('~/components/list'),
        },
    }
</script>

fileData.json文件

{
    "data":[
        {
            "folder": "story",  // 文件夾名稱
            "files": [
                {
                    "filename":"index", // 文件名
                    "id":"1996",
                    "lid":"01",
                    "title":"標題",
                    "keywords":"這是關鍵字需要替換的文本", 
                    "description":"這是描述需要替換的文本",
                    "url":"頻道鏈接https://www.baidu.com/"
                }
            ]
            
        },
        {
            "folder":"politicians",
            "files":[
                {
                    "filename":"index",
                    "id":"1996",
                    "lid":"07",
                    "title":"標題",
                    "keywords":"這是關鍵字需要替換的文本", 
                    "description":"這是描述需要替換的文本",
                    "url":"頻道鏈接https://www.baidu.com/"
                }
            ]
        }
    ]
}

這樣創(chuàng)建好的話在pages下面就會生成兩個文件夾story和politicians点额,里面都有一個index.vue文件舔株,文件的內容就是modal.vue里面的內容,把你需要替換的文本替換就可以生成不一樣的文件內容了还棱。

總結

fs文件系統(tǒng)其實我接觸的也不多载慈,跟著官方文檔的API來操作,一步一步來便可以實現(xiàn)珍手。都說Node.js 是運行在服務端的 JavaScript办铡,它很強大,就fs文件系統(tǒng)來說琳要,它有各種各樣的類和對應的方法料扰,其實不需要每一個都要精通。對于node基礎知識我們可以多了解焙蹭,一些特定的需求我們可以一邊開發(fā)一邊學習晒杈。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市孔厉,隨后出現(xiàn)的幾起案子拯钻,更是在濱河造成了極大的恐慌,老刑警劉巖撰豺,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粪般,死亡現(xiàn)場離奇詭異,居然都是意外死亡污桦,警方通過查閱死者的電腦和手機亩歹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人小作,你說我怎么就攤上這事亭姥。” “怎么了顾稀?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵达罗,是天一觀的道長。 經(jīng)常有香客問我静秆,道長粮揉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任抚笔,我火速辦了婚禮扶认,結果婚禮上,老公的妹妹穿的比我還像新娘殊橙。我一直安慰自己蝠引,他們只是感情好,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布蛀柴。 她就那樣靜靜地躺著螃概,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸽疾。 梳的紋絲不亂的頭發(fā)上吊洼,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音制肮,去河邊找鬼冒窍。 笑死,一個胖子當著我的面吹牛豺鼻,可吹牛的內容都是我干的综液。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼儒飒,長吁一口氣:“原來是場噩夢啊……” “哼谬莹!你這毒婦竟也來了?” 一聲冷哼從身側響起桩了,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤附帽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后井誉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕉扮,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年颗圣,在試婚紗的時候發(fā)現(xiàn)自己被綠了喳钟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屁使。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奔则,靈堂內的尸體忽然破棺而出蛮寂,到底是詐尸還是另有隱情,我是刑警寧澤应狱,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站祠丝,受9級特大地震影響疾呻,放射性物質發(fā)生泄漏。R本人自食惡果不足惜写半,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一岸蜗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叠蝇,春花似錦璃岳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜕该,卻和暖如春犁柜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背堂淡。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工馋缅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绢淀。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓萤悴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親皆的。 傳聞我的和親對象是個殘疾皇子覆履,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內容