摘要:基于的框架仿的社區(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...
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了
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ì)你有幫助,歡迎 starBuild 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
摘要:原文鏈接開發(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)渲...
摘要:是一款基于的服務(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)信息,使...
摘要:是一款基于的服務(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)信息,使...
摘要:公司的招聘要求都提到了至少熟悉其中一種前端框架,有前端工程化與模塊化開發(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)的新型框架也比較多,如何讓新招聘的人員...
摘要:為了解決問(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ā),但是由于前...
閱讀 3656·2021-11-23 09:51
閱讀 2000·2021-11-16 11:42
閱讀 3252·2021-11-08 13:20
閱讀 1101·2019-08-30 15:55
閱讀 2212·2019-08-30 10:59
閱讀 1246·2019-08-29 14:04
閱讀 1031·2019-08-29 12:41
閱讀 2035·2019-08-26 12:22