日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue服务端渲染-路由相关

發(fā)布時間:2023/12/20 vue 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue服务端渲染-路由相关 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Vue服務(wù)端渲染-路由相關(guān)

跟CSR項目一樣,同樣使用vue-router來為SSR項目創(chuàng)建路由。

import VueRouter from "vue-router"; import Vue from "vue"; import Home from './pages/home.vue'; import About from './pages/about.vue'; Vue.use(VueRouter);export default () => {return new VueRouter({mode:"history",routes:[{path:"/",component: Home,name:"home"},{path:"/about",component: About,name:"about"}]}) }

同時需要在app.js文件中對路由進(jìn)行注入。

import Vue from 'vue'; import App from './App.vue'; import CreateRouter from './router';export function createApp() {const router= CreateRouter();const app = new Vue({router,render: (h) => h(App),});return {app,}; }

在服務(wù)端也要實現(xiàn)路由的邏輯。
entry-server.js

import { createApp } from './app';export default (context) => {return new Promise((resolve, reject) => {const {app, router} = createApp();const { url } = context;router.push(url);router.onReady(() => {const matchedComponents = router.getMatchedComponents();if (!matchedComponents.length) {return reject({ code: 404 })}resolve(app)}, reject)}) };

最后在server.js服務(wù)文件中對路由進(jìn)行匹配

app.get('*', (req, res) => {if(req.url == '/main.js') {const file = fs.readFileSync('./dist/main.js');res.send(file);return;}const template = fs.readFileSync('./dist/index.html', 'utf-8');const bundle = require('./dist/vue-ssr-server-bundle.json');const render = createBundleRenderer(bundle, {template: template,});render.renderToString(req, (err, html) => {console.log(err);console.log(html);if (err) {if (err.code === 404) {res.status(404).end('Page not found')} else {res.status(500).end('Internal Server Error')}} else {res.end(html)}}); });

路由懶加載

import VueRouter from "vue-router"; import Vue from "vue"; import Home from './pages/home.vue'; import About from './pages/about.vue'; Vue.use(VueRouter);export default () => {return new VueRouter({mode:"history",routes:[{path:"/",component: () => import('./pages/home.vue'),name:"home"},{path:"/about",component: () => import('./pages/about.vue'),name:"about"}]}) }

在打包出來的文件可以看到多了兩個文件

- distpages_about_vue.jspages_home_vue.js

當(dāng)訪問對應(yīng)的頁面時,才會請求對應(yīng)的js的文件,這樣有助于減少瀏覽器在初始渲染中下載的資源體積。

需要注意的是,你仍然需要在掛載 app 之前調(diào)用 router.onReady,因為路由器必須要提前解析路由配置中的異步組件,才能正確地調(diào)用組件中可能存在的路由鉤子。

entry-client.js

import { createApp } from './app'; const { app, router } = createApp(); router.onReady(() => {app.$mount('#app') })

總結(jié)

以上是生活随笔為你收集整理的Vue服务端渲染-路由相关的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。