Skip to content

Commit f7c5438

Browse files
ssr
1 parent 528cdf2 commit f7c5438

File tree

26 files changed

+768
-0
lines changed

26 files changed

+768
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// https://ssr.vuejs.org/zh/
2+
3+
const Vue = require('vue')
4+
const server = require('express')()
5+
const renderer = require('vue-server-renderer').createRenderer()
6+
7+
server.get('*', (req, res) => {
8+
const app = new Vue({
9+
data: {
10+
name: 'csxiaoyao'
11+
},
12+
template: `<div>{{ name }}</div>`,
13+
created: function () {
14+
console.log('name is: ' + this.name)
15+
}
16+
})
17+
18+
renderer.renderToString(app, (err, html) => {
19+
if (err) {
20+
res.status(500).end('Internal Server Error')
21+
return
22+
}
23+
res.end(`
24+
<!DOCTYPE html>
25+
<html lang="en">
26+
<head><title>Hello</title></head>
27+
<body>${html}</body>
28+
</html>
29+
`)
30+
})
31+
32+
})
33+
34+
server.listen(8080)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
const Vue = require('vue');
2+
const server = require('express')();
3+
4+
const template = require('fs').readFileSync('./index.template.html', 'utf-8');
5+
6+
const renderer = require('vue-server-renderer').createRenderer({
7+
template,
8+
});
9+
10+
const context = {
11+
title: 'vue ssr',
12+
metas: `
13+
<meta name="keyword" content="vue,ssr">
14+
<meta name="description" content="vue srr demo">
15+
`,
16+
};
17+
18+
server.get('*', (req, res) => {
19+
const app = new Vue({
20+
data: {
21+
url: req.url
22+
},
23+
template: `<div>访问的 URL 是: {{ url }}</div>`,
24+
});
25+
26+
renderer.renderToString(app, context, (err, html) => {
27+
console.log(html);
28+
if (err) {
29+
res.status(500).end('Internal Server Error')
30+
return;
31+
}
32+
res.end(html);
33+
});
34+
})
35+
36+
server.listen(8080);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// 由于没有动态更新,所有的生命周期钩子函数中
2+
// 只有 beforeCreate 和 created 会在服务器端渲染 (SSR) 过程中被调用
3+
// 这就是说任何其他生命周期钩子函数中的代码(例如 beforeMount 或 mounted),只会在客户端执行
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const Vue = require('vue')
2+
3+
module.exports = function createApp (context) {
4+
return new Vue({
5+
data: {
6+
url: context.url
7+
},
8+
template: `<div>访问的 URL 是: {{ url }}</div>`,
9+
created () {
10+
this.url += '~~~'
11+
}
12+
})
13+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const createApp = require('./app')
2+
const server = require('express')();
3+
const template = require('fs').readFileSync('./index.template.html', 'utf-8');
4+
5+
const renderer = require('vue-server-renderer').createRenderer({
6+
template,
7+
});
8+
9+
server.get('*', (req, res) => {
10+
const context = { url: req.url }
11+
const app = createApp(context)
12+
13+
renderer.renderToString(app, (err, html) => {
14+
// 处理错误……
15+
res.end(html)
16+
})
17+
})
18+
19+
server.listen(8080);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
```
3+
src
4+
├── components
5+
│ ├── Foo.vue
6+
│ ├── Bar.vue
7+
│ └── Baz.vue
8+
├── App.vue
9+
├── app.js # 通用 entry(universal entry)
10+
├── entry-client.js # 仅运行于浏览器
11+
└── entry-server.js # 仅运行于服务器
12+
```

11-构建工具/04-ssr/vue-ssr/05-webpack-demo/src/App.vue

Whitespace-only changes.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import Vue from 'vue'
2+
import App from './App.vue'
3+
4+
// 导出一个工厂函数,用于创建新的
5+
// 应用程序、router 和 store 实例
6+
export function createApp () {
7+
const app = new Vue({
8+
// 根实例简单的渲染应用程序组件。
9+
render: h => h(App)
10+
})
11+
return { app }
12+
}

11-构建工具/04-ssr/vue-ssr/05-webpack-demo/src/components/Bar.vue

Whitespace-only changes.

11-构建工具/04-ssr/vue-ssr/05-webpack-demo/src/components/Baz.vue

Whitespace-only changes.

0 commit comments

Comments
 (0)