成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于vue的nuxt框架cnode社區(qū)服務(wù)端渲染

tainzhi / 3202人閱讀

摘要:基于的框架仿的社區(qū)服務(wù)端渲染,主要是為了優(yōu)化以及首屏加載速度線上地址地址技術(shù)棧目錄結(jié)構(gòu)配置文件封裝工具函數(shù)滾動(dòng)條操作函數(shù)靜態(tài)資源實(shí)例化之前執(zhí)行的插件注冊(cè)全局組件注冊(cè)全局服務(wù)端渲染時(shí)保存供服務(wù)端請(qǐng)求時(shí)的獲取頁(yè)面級(jí)組件首頁(yè)登錄頁(yè)未讀消

nuxt-cnode
基于vue的nuxt框架仿的cnode社區(qū)服務(wù)端渲染,主要是為了seo優(yōu)化以及首屏加載速度

線上地址 http://nuxt-cnode.foreversnsd.cn
github地址 https://github.com/Kim09AI/nu...

技術(shù)棧

vue

vue-router

vuex

nuxt

axios

simplemde

ES6/7

stylus

目錄結(jié)構(gòu)
├─npm-shrinkwrap.json
├─nuxt.config.js                # nuxt配置文件
├─package.json
├─README.md
├─utils
|   ├─axios.js                  # axios封裝
|   ├─index.js                  # 工具函數(shù)
|   └scroll.js                  # 滾動(dòng)條操作函數(shù)
├─store                         # store
|   ├─actions.js
|   ├─getters.js
|   ├─index.js
|   ├─mutation-types.js
|   ├─mutations.js
|   ├─README.md
|   └state.js
├─static                        # 靜態(tài)資源
|   ├─favicon.ico
|   └README.md
├─plugins                       # vue實(shí)例化之前執(zhí)行的插件
|    ├─component.js             # 注冊(cè)全局組件
|    ├─filter.js                # 注冊(cè)全局filter
|    ├─README.md                
|    └ssrAccessToken.js         # 服務(wù)端渲染時(shí)保存access_token,供服務(wù)端請(qǐng)求時(shí)的api獲取
├─pages                         # 頁(yè)面級(jí)組件
|   ├─index.vue                 # 首頁(yè)
|   ├─login.vue                 # 登錄頁(yè)
|   ├─README.md 
|   ├─user
|   |  ├─messages.vue           # 未讀消息頁(yè)
|   |  ├─_id
|   |  |  ├─index.vue           # 用戶信息頁(yè)
|   |  |  └collections.vue      # 用戶收藏的主題頁(yè)
|   ├─topic
|   |   ├─create.vue            # topic創(chuàng)建頁(yè),復(fù)用為編輯頁(yè)
|   |   ├─_id
|   |   |  └index.vue           # topic詳情頁(yè)
├─mixins                        # mixins
|   └index.js
├─middleware                    # 中間件,頁(yè)面渲染之前執(zhí)行
|     ├─auth.js                 # 用戶權(quán)限中間件
|     ├─checkRoute.js           # 主要是對(duì)404頁(yè)面的重定向
|     └README.md
├─layouts                       # 布局
|    ├─default.vue
|    └README.md
├─filters                       # 全局filter
|    └index.js
├─components
|     ├─alert.vue               # 提示組件
|     ├─backTop.vue
|     ├─clientPanel.vue
|     ├─commentList.vue         # 評(píng)論列表
|     ├─commonFooter.vue
|     ├─commonHeader.vue
|     ├─mainLayout.vue          # 頁(yè)面內(nèi)的主布局,劃分左右兩欄
|     ├─markdown.vue            # 基于simplemde封裝的組件
|     ├─messageList.vue         # 消息列表
|     ├─pageNav.vue             # 分頁(yè)組件
|     ├─panel.vue
|     ├─README.md
|     ├─tabHeader.vue
|     ├─topicCreatePanel.vue
|     ├─topicList.vue           # 文章列表
|     └userInfoPanel.vue
├─assets
|   ├─README.md
|   ├─css
|   |  ├─common.styl
|   |  ├─icon.styl
|   |  ├─index.styl
|   |  ├─mixin.styl
|   |  ├─reset.styl
|   |  └simplemdecover.styl
├─api                           # 請(qǐng)求api
|  └index.js
實(shí)現(xiàn)的功能

首頁(yè)

topic詳情頁(yè)

新建topic

編輯topic

收藏topic

用戶收藏的topic

取消收藏topic

新建topic的評(píng)論

新建評(píng)論的評(píng)論

點(diǎn)贊評(píng)論

個(gè)人信息及用戶信息

登錄/退出

未讀消息頁(yè)

cookie的共享

只要做服務(wù)端渲染,不管是vue還是react,都必然會(huì)遇到cookie共享的問(wèn)題,因?yàn)樵诜?wù)器上不會(huì)為請(qǐng)求自動(dòng)帶cookie,所以需要手動(dòng)來(lái)為請(qǐng)求帶上cookie,以下方法主要是借鑒vue-srr導(dǎo)出一個(gè)創(chuàng)建app、router、store工廠函數(shù)的方法,導(dǎo)出一個(gè)創(chuàng)建axios的工廠函數(shù),然后把創(chuàng)建的axios實(shí)例注入store,建立store與axios一一對(duì)應(yīng)的關(guān)系,
然后就可以通過(guò)store.$axios或state.$axios去請(qǐng)求就會(huì)自動(dòng)帶cookie了

首先獲取cookie中的東西放到store.state
export const nuxtServerInit = async ({ commit, dispatch, state }, { req }) => {
    let accessToken = parseCookieByName(req.headers.cookie, "access_token")

    if (!!accessToken) {
        try {
            let res = await state.$axios.checkAccesstoken(accessToken)

            if (res.success) {
                let userDetail = await state.$axios.getUserDetail(res.loginname)
                userDetail.data.id = res.id

                // 提交登錄狀態(tài)及用戶信息
                dispatch("setUserInfo", {
                    loginState: true,
                    user: userDetail.data,
                    accessToken: accessToken
                })
            }
        } catch (e) {
            console.log("fail in nuxtServerInit", e.message)
        }
    }
}
導(dǎo)出一個(gè)創(chuàng)建axios的工廠函數(shù)
class CreateAxios extends Api {
    constructor(store) {
        super(store)
        this.store = store
    }

    getAccessToken() {
        return this.store.state.accessToken
    }

    get(url, config = {}) {
        let accessToken = this.getAccessToken()

        config.params = config.params || {}
        accessToken && (config.params.accesstoken = accessToken)

        return axios.get(url, config)
    }

    post(url, data = {}, config = {}) {
        let accessToken = this.getAccessToken()

        accessToken && (data.accesstoken = accessToken)

        return axios.post(url, qs.stringify(data), config)
    }

    // 返回服務(wù)端渲染結(jié)果時(shí)會(huì)用JSON.stringify對(duì)state處理,因?yàn)閟tore與$axios實(shí)例循環(huán)引用會(huì)導(dǎo)致無(wú)法序列化
    // 添加toJSON繞過(guò)JSON.stringify
    toJSON() {}
}

export default CreateAxios
在創(chuàng)建store時(shí)創(chuàng)建axios并把a(bǔ)xios注入store
const createStore = () => {
    let store = new Vuex.Store({
        state,
        getters,
        mutations,
        actions
    })

    store.$axios = store.state.$axios =  new CreateAxios(store)

    if (process.browser) {
        let replaceState = store.replaceState.bind(store)
        store.replaceState = (...args) => {
            replaceState(...args)
            store.state.$axios = store.$axios
            replaceState = null
        }
    }

    return store
}

export default createStore

之后就可以在asyncData函數(shù)中使用store.$axios、在組件內(nèi)使用this.$store.$axios、在axtion中使用state.$axios或rootState.$axios發(fā)起請(qǐng)求了,這些請(qǐng)求都會(huì)自動(dòng)的帶上cookie中的東西

若該項(xiàng)目對(duì)你有幫助,歡迎 star
Build Setup
# install dependencies
$ npm install # Or yarn install

# serve with hot reload at localhost:3000
$ npm run dev

# build for production and launch server
$ npm run build
$ npm start

# generate static project
$ npm run generate

For detailed explanation on how things work, checkout the Nuxt.js docs.

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94073.html

相關(guān)文章

  • Nuxt.js 基礎(chǔ)入門教程

    摘要:原文鏈接開發(fā)一個(gè)單頁(yè)面應(yīng)用,相信很多前端工程師都已經(jīng)學(xué)會(huì)了,但是單頁(yè)面應(yīng)用有一個(gè)致命的缺點(diǎn),就是極不友好?;谒?,我們可以快速開發(fā)一個(gè)基于的單頁(yè)面應(yīng)用。只有數(shù)據(jù)流存在相關(guān)配置時(shí)可用。引入后,所有頁(yè)面均有效。 原文鏈接 Vue 開發(fā)一個(gè)單頁(yè)面應(yīng)用,相信很多前端工程師都已經(jīng)學(xué)會(huì)了,但是單頁(yè)面應(yīng)用有一個(gè)致命的缺點(diǎn),就是 SEO 極不友好。除非,vue 能在服務(wù)端渲染(ssr)并直接返回已經(jīng)渲...

    yedf 評(píng)論0 收藏0
  • 淺談NUXT - 基于vue.js服務(wù)渲染框架

    摘要:是一款基于的服務(wù)端渲染框架,跟的異曲同工。該配置項(xiàng)用于定義應(yīng)用客戶端和服務(wù)端的環(huán)境變量。 Vue因其簡(jiǎn)單易懂的API、高效的數(shù)據(jù)綁定和靈活的組件系統(tǒng),受到很多前端開發(fā)人員的青睞。國(guó)內(nèi)很多公司都在使用vue進(jìn)行項(xiàng)目開發(fā),我們正在使用的簡(jiǎn)書,便是基于Vue來(lái)構(gòu)建的。 我們知道,SPA前端渲染存在兩大痛點(diǎn):(1)SEO。搜索引擎爬蟲難以抓取客戶端渲染的頁(yè)面meta信息和其他SEO相關(guān)信息,使...

    yearsj 評(píng)論0 收藏0
  • 淺談NUXT - 基于vue.js服務(wù)渲染框架

    摘要:是一款基于的服務(wù)端渲染框架,跟的異曲同工。該配置項(xiàng)用于定義應(yīng)用客戶端和服務(wù)端的環(huán)境變量。 Vue因其簡(jiǎn)單易懂的API、高效的數(shù)據(jù)綁定和靈活的組件系統(tǒng),受到很多前端開發(fā)人員的青睞。國(guó)內(nèi)很多公司都在使用vue進(jìn)行項(xiàng)目開發(fā),我們正在使用的簡(jiǎn)書,便是基于Vue來(lái)構(gòu)建的。 我們知道,SPA前端渲染存在兩大痛點(diǎn):(1)SEO。搜索引擎爬蟲難以抓取客戶端渲染的頁(yè)面meta信息和其他SEO相關(guān)信息,使...

    godiscoder 評(píng)論0 收藏0
  • 珠峰前架構(gòu)師培養(yǎng)計(jì)劃

    摘要:公司的招聘要求都提到了至少熟悉其中一種前端框架,有前端工程化與模塊化開發(fā)實(shí)踐經(jīng)驗(yàn)相關(guān)字眼。我們主要從端公眾號(hào)移動(dòng)端小程序三大平臺(tái)進(jìn)行前端的技術(shù)選型,并來(lái)說(shuō)說(shuō)選其技術(shù)的幾大優(yōu)勢(shì)。技術(shù)的優(yōu)勢(shì)互聯(lián)網(wǎng)前端大潮后,前端出現(xiàn)了大框架,分別是與。 1、技術(shù)選型的背景前端技術(shù)發(fā)展日新月異,互聯(lián)網(wǎng)上出現(xiàn)的新型框架也比較多,如何讓新招聘的人員...

    ccj659 評(píng)論0 收藏0
  • 服務(wù)預(yù)渲染Nuxt(介紹篇)

    摘要:為了解決問(wèn)題,推出了服務(wù)端預(yù)渲染,以便提高對(duì)優(yōu)化。應(yīng)用,到了,單頁(yè)面應(yīng)用優(yōu)秀的用戶體驗(yàn),逐漸成為了主流,頁(yè)面整體式渲染出來(lái)的,稱之為客戶端渲染??蛻舳私邮諗?shù)據(jù),然后完成最終渲染。通過(guò)對(duì)客戶端服務(wù)端基礎(chǔ)框架的抽象組織,主要關(guān)注的是應(yīng)用的渲染。 現(xiàn)在前端開發(fā)一般都是前后端分離,mvvm和mvc的開發(fā)框架,如Angular、React和Vue等,雖然寫框架能夠使我們快速的完成開發(fā),但是由于前...

    Shonim 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<