我的目标:将Nuxt 3呈现的代码粘贴到我用Nuxt 2编写的旧应用程序中。粘贴将是Varnish,并使用<esi:includes
我的问题:我有.vue
文件
<template>
<div>
<esi:include src="/from/nuxt-3-app" method="GET" />
</div>
</template>
它确实工作了几秒钟,然后就消失了!
我得到的错误:
1. Mismatching childNodes vs. VNodes: NodeList(15) [text, meta, text, meta, link, link, link, link, link, text, div#__nuxt, script, script, script, text] (3) [VNode, VNode, VNode...
2. [Vue warn]: The client-side rendered virtual DOM tree is not matching server-rendered content. This is likely caused by incorrect HTML markup, for example nesting block-level elements inside <p>, or missing <tbody>. Bailing hydration and performing full client-side render.
3. [Vue warn]: Unknown custom element: .... <- resolved by adding `v-pre` in <esi:include ... v-pre />
注意:它们按顺序显示^
我所做的:
- 使用v-pre
- ignoredElements?-〉我试着像这样声明它:
nuxt.config.js
...
Vue: {
config: {
ignoredElements: ["esi:include"]
}
}
^但似乎不起作用
- 用
<client-only> ... </client-only>
包裹<esi:include ... />
("nuxt":"^2.15.8")
^副作用,它不显示或渲染我的<esi:include
中的内容
我将要尝试的是:
- 代理控制头-Reference,但似乎不是我需要的,因为我已经默认声明了
do_esi=true
。如果你想看的话,下面是我的VCL:
backend test {
.host = "host.docker.internal";
.port = "3101";
}
sub vcl_backend_response {
set beresp.ttl = 1s;
set beresp.do_esi = true;
}
sub vcl_recv {
unset req.http.cookie;
if (req.url ~ "^/from/nuxt-3-app") {
set req.backend_hint = test;
return (hash);
}
}
我只想要:渲染<esi:includes ... />
内部的内容,而不删除它
1条答案
按热度按时间jgovgodb1#
虽然我不喜欢无条件ESI解析,也不喜欢我在the answer you're referring to中解释的ESI内容协商,但我们必须首先弄清楚为什么ESI根本没有得到解析。
请运行以下命令并将输出附加到原始问题:
我假设
/
是包含ESI标记的页面的URL,如果不是这样,请在-q
过滤器中调整URL。根据您可能提供的
varnishlog
输出,我将尝试提供适当的解决方案。