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
    

    渲染也正确了。

  • 相关阅读:
    AcWing 157. 树形地铁系统 (hash判断树同构)打卡
    AcWing 156. 矩阵 (哈希二维转一维查询)打卡
    AcWing 144. 最长异或值路径 01字典树打卡
    AcWing 143. 最大异或对 01字典树打卡
    AcWing 142. 前缀统计 字典树打卡
    AcWing 139. 回文子串的最大长度 hash打卡
    AcWing 138. 兔子与兔子 hash打卡
    常用C库函数功能及用法
    编程实现C库函数
    C语言面试题5
  • 原文地址:https://www.cnblogs.com/everlose/p/14510550.html
Copyright © 2011-2022 走看看