zoukankan      html  css  js  c++  java
  • Vue SSR 报警 The client-side rendered virtual DOM tree is not matching server-rendered con

    接手前人留下来的 vue server side rendering 官网项目,访问测服路径时控制台报警

    [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.
    

    而官网的 SSR 渲染是根据进来的 hostname 是哪个而决定渲染哪个页面。出了的这个问题意味着 SSR 服务端渲染的页面内容,和前端客户端渲染时页面不一致。

    我在 node render 的部分打印返回

    const render = (req, res) => {
      // ......
      console.log('~~打印了~~~origin: ', origin, ' hostname: ' + req.hostname, ' host: ' + req.host)
      renderer.renderToString(context, (err, html) => {
        // ......
      })
    }
    

    访问 mctalk-test.netease.im 得到的是

    ~~打印了~~~origin:  http://mctalk-test.netease.im  hostname: home.netease.im  host: home.netease.im
    

    震惊,居然 origin 和 hostname 不一样。肯定是 nginx 转发过来的锅了,我找到 nginx 配置

    server {
      server_name home.netease.im mctalk-test.netease.im;
    
      listen 80;
    
      proxy_set_header X-Forwarded-For  $remote_addr;
      proxy_set_header X-Real-IP  $remote_addr;
      proxy_set_header X-Forwarded-Host $server_name;
      proxy_set_header Host $host;
      proxy_set_header X-Request-Host $host;
    
    
      location / {
        # ... 跳转配置略
      }
    }
    

    绕了两圈我才回过神,大概就是上文的 $host 变量出了问题搞得。

    所以把 nginx 配置拆开就更解决了

    server {
      server_name home.netease.im;
    
      listen 80;
    
      proxy_set_header X-Forwarded-For  $remote_addr;
      proxy_set_header X-Real-IP  $remote_addr;
      proxy_set_header X-Forwarded-Host $server_name;
      proxy_set_header Host $host;
      proxy_set_header X-Request-Host $host;
    
    
      location / {
        # ... 跳转配置略
      }
    }
    server {
      server_name mctalk-test.netease.im;
    
      listen 80;
    
      proxy_set_header X-Forwarded-For  $remote_addr;
      proxy_set_header X-Real-IP  $remote_addr;
      proxy_set_header X-Forwarded-Host $server_name;
      proxy_set_header Host $host;
      proxy_set_header X-Request-Host $host;
    
    
      location / {
        # ... 跳转配置略
      }
    }
    

    重启 nginx 后再次访问 mctalk-test.netease.im 得到的是

    ~~打印了~~~origin:  http://mctalk-test.netease.im  hostname: mctalk-test.netease.im  host: mctalk-test.netease.im
    

    渲染也正确了。

  • 相关阅读:
    sql执行效率小结--待持续新加更新
    野路子学习esp32(十) NodeMcu-自定义固件@a.宏万
    野路子学习esp32(十) NodeMcu-网络应用@a.宏万
    野路子学习esp32(十) NodeMcu-WIFi@a.宏万
    野路子学习esp32(十) NodeMcu-GPIO@a.宏万
    野路子学习esp32(九) NodeMcu学习@a.宏万
    野路子学习esp32(八) GPIO 点亮LED@a.宏万
    野路子学习esp32(七) 新建一个应用@a.宏万
    EMQ 安装与部署 @a.宏万
    阿里云代码管理配置@a.宏万
  • 原文地址:https://www.cnblogs.com/everlose/p/14510550.html
Copyright © 2011-2022 走看看