标签: server-side-rendering

预期服务器 HTML 在 <table> 中包含匹配的 <tr> / Hydration 失败,因为初始 UI 与服务器上呈现的内容不匹配

下一个js 13.2.3

Next js 不能使用 table 元素。

"use client";
export default function index() {
  return (
            <table>
                <tr>
                    <th>Company</th>
                    <th>Contact</th>
                    <th>Country</th>
                </tr>
                <tr>
                    <td>Alfreds Futterkiste</td>
                    <td>Maria Anders</td>
                    <td>Germany</td>
                </tr>
                <tr>
                    <td>Centro comercial Moctezuma</td>
                    <td>Francisco Chang</td>
                    <td>Mexico</td>
                </tr>
            </table>
  )
}
Run Code Online (Sandbox Code Playgroud)

它有效,但我收到错误。

Unhandled Runtime Error

Error: Hydration failed because the initial UI does not match what was rendered on the server.

Warning: Expected server HTML to contain a matching <tr> in <table>.
Run Code Online (Sandbox Code Playgroud)

我应该停止使用这个元素还是可以解决这个问题?

https://stackblitz.com/edit/nextjs-jvjltx?file=app%2Fpage.js - 示例

html html-table reactjs server-side-rendering next.js

3
推荐指数
1
解决办法
2989
查看次数

SvelteKit 商店与客户端和服务器端不匹配

在 SvelteKit 中,商店似乎在客户端和服务器端之间不同步。换句话说,如果在客户端修改了一个存储,那么当在服务器端检索它时,它就不会被修改,反之亦然。

您可以在下面的最小可重现示例中看到此行为:

https://stackblitz.com/edit/sveltejs-kit-template-default-fpp2y8?file=src/routes/+page.svelte

我的问题是:在客户端修改服务器端存储的惯用或正常方法是什么?

为了避免XY Problem,我具体尝试做的事情如下:

EPOS 系统的用户有一个“currentSale”商店,该商店在访问/epos服务器端的路由时加载,专门用于使Prisma可以获得有关产品、客户附加等的更多信息。

然而,例如,当用户尝试增加 EPOS 销售中的产品数量时,就会出现问题。尝试更新商店不起作用,因为它不会保存服务器端。使用整个 API 路径或表单操作似乎太过分了,而且不是优化/最佳的。

javascript store server-side-rendering svelte sveltekit

3
推荐指数
1
解决办法
2157
查看次数

当缓存不可用时,Astro js 是否会回退到 SSR?

在 Next.js 中,当缓存不可用时,Next.js 将转至 SSR 页面并显示它(基于首选回退方法 true 或阻塞)。

我想知道 Astro.jd 在这种情况下采取了什么方法。我将创建一个动态博客网站,用户可以快速创建博客。

我是否必须每次都构建静态页面,还是最好采用 Astro.js SSR 方法?

javascript server-side-rendering next.js astrojs

3
推荐指数
1
解决办法
1769
查看次数

Next.js App Router 的 SEO 性能:服务器组件还是客户端组件?

我曾经认为,当您使用该"use client"指令声明页面或组件时,您将无法在浏览器的“查看页面源代码”上看到这些页面,因为它们仅在客户端使用 JS 呈现(仅就像纯 React 发生的情况一样)。

然而,我刚刚测试了这个案例,发现几乎所有在“使用客户端”下编写的内容仍然显示在页面源代码上。那么服务器组件和带有“使用客户端”指令的 SEO 组件之间有什么区别呢?

使用服务器组件也有助于 SEO 吗?或者它的主要应用是为了提高性能?

seo reactjs server-side-rendering next.js

3
推荐指数
1
解决办法
728
查看次数

Vuejs 2服务器端渲染 - 无法正常工作

我一直在努力使我的vuejs应用程序与SSR功能良好,但我的所有尝试都失败了.我真的需要帮助.

请注意,我使用普通的js文件,而不是使用es6的.vue文件,并且需要使用webpack require函数的html模板.

该应用程序在开发模式下工作正常,但是,当我使用'vue-server-renderer'开始执行它并转到任何路由时,将抛出此错误:

错误:在组件中未定义渲染函数或模板:在presentationComponent(/ Users/salaahassi /)上的normalizeRender(/Users/salaahassi/dev/vue/magicum/node_modules/vue-server-renderer/build.js:6015:13)中匿名dev/vue/magicum/node_modules/vue-server-renderer/build.js:6081:3)在renderNode(/Users/salaahassi/dev/vue/magicum/node_modules/vue-server-renderer/build.js:6065: 7)在渲染(/Users/salaahassi/dev/vue/magicum/node_modules/vue-server-renderer/build.js:6257:5)RenderStream.render(/ Users/salaahassi/dev/vue/magicum/node_modules /) vue-server-renderer/build.js:6312:9)RenderStream.tryRender(/Users/salaahassi/dev/vue/magicum/node_modules/vue-server-renderer/build.js:96:12)在RenderStream._read (/ Users/salaahassi/dev/vue/magicum/node_modules/vue-server-renderer/build.js:125:12)在RenderStream.Readable.read(_stream_readable.js:348:10)的resume_(_ stream_readable.js: 737:12)在_combinedTickCallback(internal/process/next_tick.js:74:11)

此外,当我在我的浏览器上禁用javascript时,即使主页也会消失(当然这是因为它不能通过SSR工作).

这是我的webpack:

var path = require('path')
var webpack = require('webpack')
var HTMLPlugin = require('html-webpack-plugin');
var CopyWebpackPlugin = require('copy-webpack-plugin');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var extractCSS = new ExtractTextPlugin('styles.css');

var options = {
  // entry: './entry.client.js',
  entry: {
    app: './entry.client.js',
    vendor: [
      'vue',
      'vue-router',
      'vuex',
      'vuex-router-sync',
      'moment',
      'axios'
    ]
  },
  output: {
    path: path.resolve(__dirname, './dist'),
    publicPath: '/',
    filename: '[name].[hash].js',
  },
  module: {
    noParse: /es6-promise\.js$/, // avoid webpack …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js server-side-rendering vue-router vuejs2

2
推荐指数
1
解决办法
2898
查看次数

在脚本标签中嵌入 json 的安全方式

假设我的 html 文档中有以下脚本标签:

<script type="application/json" id="stuff">
    {
        "unicorns": "awesome",
        "abc": [1, 2, 3]
    }
</script>
Run Code Online (Sandbox Code Playgroud)

我正在我的应用程序中解析这个 JSON。有人告诉我,...

这种在脚本标签中嵌入 json 的方法存在潜在的安全问题。假设 json 数据源自用户输入,则可以制作一个数据成员,该成员实际上会脱离脚本标记并允许直接注入到 dom 中。看这里:

<script type="application/json" id="stuff">
{
    "unicorns": "awesome",
    "abc": [1, 2, 3],
    "badentry": "blah </script><div id='baddiv'>I should not exist.</div><script type="application/json" id='stuff'> ",
}
</script>
Run Code Online (Sandbox Code Playgroud)

我需要在脚本标签中嵌入一个 JSON,但我不知道我应该如何做到这一点,而不会泄露安全漏洞。

谢谢你的帮助。

javascript xss json reactjs server-side-rendering

2
推荐指数
1
解决办法
719
查看次数

angular 通用应用性能,APP_BOOTSTRAP_LISTENER,闪烁

Angular 4.4.6
Angular CLI 1.3.2
Node 6.x.x
NPM 3.10.10
Webpack 3.4.1
Run Code Online (Sandbox Code Playgroud)

在 Angular Universal 应用程序中,当服务器视图切换到客户端视图时,屏幕会出现闪烁,因为在服务器端渲染中调用的所有 API 也在客户端渲染中调用,因为存在闪烁。

为了消除这种闪烁,我实现了 Angular Universal Transfer Module,它private _map = new Map<string, any>();在服务器端渲染时将数据存储在地图缓存 ( ) 中,并将其传输到客户端,因此客户端不需要再次调用 api 并立即从缓存中获取数据。

转移是通过该提供商进行的。

{
    provide: APP_BOOTSTRAP_LISTENER,
    useFactory: onBootstrap,
    multi: true,
    deps: [
        ApplicationRef,
        TransferState
    ]
}

export function onBootstrap(appRef: ApplicationRef, transferState: TransferState) {
    return () => {
        appRef.isStable
        .filter(stable => stable)
        .first()
        .subscribe(() => {
            transferState.inject();
        });
    };
}
Run Code Online (Sandbox Code Playgroud)

这样闪烁消失了,但应用程序性能下降了,在对应用程序进行负载测试时,闪烁的结果比非闪烁的应用程序更快,这是为什么?

可能是因为在负载测试或机器人访问网站的情况下,没有浏览器所以缓存永远不会被清除,它只是用缓存内存填充服务器并且服务器变慢,有什么解决方案可以解决这个问题,要么创建机器人和真实用户的不同实例,通过在 nginx 级别识别请求,oe 还有一些我在 angular Universal 中缺少的东西。

javascript nginx server-side-rendering angular-universal angular

2
推荐指数
1
解决办法
2244
查看次数

NUXT 中的 SSR vuex 存储

我正在开发 vue2+nuxt 应用程序,我正在使用 vuex+persisted state 包。在其中一个组件中,我根据状态布尔变量显示带有条件的 div:

<template>
    <div class="nav__topbar" v-if="show">
         ....
    </div>
</template>
<script>
    export default {
        computed: {
            show() {
                return this.$store.state.navInfo.navInfo
            }
        }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

一切正常 - 如果this.$store.state.navInfo.navInfo为真,则显示,否则显示消失。同样在刷新后它仍然有效。

我无法解决的唯一问题是,在刷新 div 显示一秒钟后布尔值为 false 时。它在说 0.2 秒后消失了,但即使它如此之快,它仍然会使页面“跳跃”,因为它.nav__topbar是 100% 宽度和 20vh 高度。因此,有一段时间我可以看到这个 div,然后它会隐藏并且所有页面都跳起来,这看起来非常难看,我无法忽略它。

有什么办法可以防止这种行为吗?


也许我可以使用 Nuxt 提供的这个 fetch() 或 asyncData 钩子?

vue.js server-side-rendering vuex vuejs2 nuxt.js

2
推荐指数
1
解决办法
4432
查看次数

在 webpack (SSR) 捆绑的 express 中找不到静态文件夹

我打算进行服务器端渲染以与事件处理程序做出反应,但我遇到了在 localhost express 服务器中获取 index.js 文件的问题。试图在这里寻找其他几个答案,但我似乎无法解决这个问题。

这是代码。

import express from "express";
import React from "react";
import { renderToString } from "react-dom/server";
import App from "./app/home/app";
import path from "path";
import fs from "fs";

let server = port => {
  const app = express();

  app.use('/js', express.static(path.resolve('/static')));
  console.log(path.resolve('/static'));
  console.log(path.join(__dirname, '/static'));
  console.log(fs.existsSync(path.resolve('/static')));

  app.get("/", (req, res) => {
    res.status(200).send(renderMarkup(renderToString(<App />)));
  });

  app.get("/ping", (req, res) => {
    res.status(200).send("HELLO!");
  });

  app.listen(port, () => console.log("Server Ready!"));
}

let renderMarkup = html => {
  return `
    <!DOCTYPE html> …
Run Code Online (Sandbox Code Playgroud)

javascript node.js express server-side-rendering

2
推荐指数
1
解决办法
993
查看次数

在组件内部使用React Router Link

我正在组件内部使用链接来转到不同的页面,例如

 <Link to={'/documents/' + x.id}></Link
Run Code Online (Sandbox Code Playgroud)

但是,这会导致SEO问题,因为页面更改时元标记不会刷新。我也在使用服务器端渲染。

什么是使用链接仍然可以流畅地进行页面更改并且仍然可以进行SEO优化的正确方法。

谢谢

reactjs react-router server-side-rendering

2
推荐指数
1
解决办法
54
查看次数