vue项目的部分页面的SSR



server服务端示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
const Vue = require('vue')
const express = require('express')
const server = require('express')()
const renderer = require('vue-server-renderer').createRenderer()
const fs = require('fs')

server.use(express.static(__dirname))

server.get('*', (req, res) => {
const app = new Vue({
data: {
title: '操作手册',
list: []
},
template: `
<div class="guide">
<div v-for="(img, index) in list" :key="index">
<img :src="img" style="width:100%"/>
</div>
</div>`,
created() {
for (let index = 23; index <= 36; index++) {
let src = `./../static/guide${index}.png`
this.list.push(src)
}
}
})

renderer.renderToString(app, (err, html) => {
console.log(app._data);
if (err) {
res.status(500).end('Internal Server Error')
return
}
res.end(`
<!DOCTYPE html>
<html lang="en">
<head><title>${app._data.title}</title></head>
<meta charset='utf-8'></meta>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<body>${html}</body>
<script>
function rem2html(){
var html = document.documentElement
window.rem = html.getBoundingClientRect().width / 7.5
html.style.fontSize = window.rem + 'px'
}

window.onresize = function (){
rem2html()
}

rem2html()
</script>
</html>
`)
})
})

server.listen(3003)

SSR效果: