【发布时间】:2019-03-27 10:40:55
【问题描述】:
我目前正在重构一个应用程序并将我的所有基本代码转换为 vue。我的要求之一是进行服务器端渲染。
我一直在关注 vue ssr 示例以及黑客新闻示例,以帮助我了解 ssr。
但我确实有一个问题我找不到任何好的答案,在进一步开发之前,我想确保我们做的是正确的事情。
我想知道在 vue 商店中有一些操作调用 api 进行服务器端渲染是否是一种好习惯。
我发现的所有示例都处理它们连接并执行请求的真实外部端点。但这不是我们的设置。
我们确实有一个带有自己端点的“普通”快递应用;例如,express 路由器看起来有点像这样:
// This is our post model, it lives on the same app, so its not a external API
app.get('/posts', (req, res) => Posts.getPosts());
// Resolve request for SSR rendering, pretty much the same as in [vue ssr example](https://ssr.vuejs.org/guide/routing.html#routing-with-vue-router)
app.get(
const context = { url: req.url }
createApp(context).then(app => {
renderer.renderToString(app, (err, 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)
}
})
})
);
这部分在客户端和服务器上都可以正常工作。如果您向 /posts 请求某些内容,您会得到回复。
为了有更模块化的代码,我们使用 vuex 存储;是称为 fetchPosts 的操作之一,此操作负责获取视图中的当前帖子。
...
actions: {
fetchPosts({ commit }) {
return $axios.get('/posts').then((response) => {
commit('setPosts', {
posts: response.data
});
});
}
},
...
我相信对于客户端来说这很好,但是在服务器上渲染时,这可能不是最佳的。
原因是 axios 执行一个实际的 http 请求,它也必须实现 auth 机制,而且通常性能很差。
我的问题是:这是推荐的标准方法吗?
在服务器和客户端中工作的其他可能性是什么?
人们真的会为 api 和渲染应用创建分离的应用吗?
谢谢!
【问题讨论】:
-
只是一种题外话,看看“Nuxt”
-
我知道 Nuxt,但想在不使用其他任何东西的情况下实现和开发它,所以寻找不需要更多依赖项的解决方案 :)
-
当然只是建议我们也开发了一个 SSR 站点并且到目前为止对 Nuxt 有很好的经验
标签: vue.js vuex server-side-rendering