【发布时间】:2018-06-07 16:32:32
【问题描述】:
我正在尝试了解在使用 aspnet core 时使用 vuejs 进行服务器端渲染的用法和限制。
我用this starter kit for aspnet core and vuejs搭建了一个简单的vue站点,基于这里的代码运行:https://github.com/selaromdotnet/aspnet-vue-ssr-test/tree/master
然后我修改了项目以更新 aspnet-prerendering 并添加了 vue-server-renderer,编译了一个大杂烩来拼凑这次更新:https://github.com/selaromdotnet/aspnet-vue-ssr-test/tree/ssr
如果我运行这个项目,网站似乎可以正常加载,如果我关闭浏览器中的 javascript,我可以看到服务器端渲染似乎已执行并填充了 html 结果:
然而,由于 JavaScript 被禁用,内容并没有被移动到 dom 中,因为它看起来正在尝试......
我对服务器端渲染的理解是,它会完全填充 html 并向用户提供完整的页面,这样即使 JS 被禁用,他们至少也能看到页面(特别是针对 SEO目的)。我错了吗?
现在我相信现代搜索引擎会执行这样的简单脚本来获取内容,但我仍然不希望在禁用 js 时呈现空白页面...
这是服务器端渲染的限制,还是特别是带有 vue 和/或 aspnet 核心的 ssr?
还是我只是在某个地方错过了一步?
编辑:更多信息
我查看了源代码,我认为这是在此处预呈现该部分的方法:https://github.com/aspnet/JavaScriptServices/blob/dev/src/Microsoft.AspNetCore.SpaServices/Prerendering/PrerenderTagHelper.cs
线
output.Content.SetHtmlContent(result.Html);
result.Html 的值为空。但是,当我手动编辑此值以放入测试值时,它也不会呈现到输出 html,并且 app div 标签仍然为空...
如果我在使用预期输出填充 result.Html 值时做错了事,那是一回事,我希望能得到一些帮助,特别是因为似乎找到了输出 html,因为它位于紧随其后的脚本...
但是,即使我要填充它,它似乎也被跳过了,正如我手动更改值所证明的那样。这是代码中的错误还是我做错了什么,或者两者兼而有之?
【问题讨论】:
标签: vue.js vuejs2 asp.net-core-2.0 server-side-rendering asp-net-core-spa-services