Express.js 服务器端渲染 - 请求'/json/version/

2023-12-27

我有一个正在运行的快速服务器来预渲染我的反应应用程序。我有一个将 HomeContainer 与基本路线相匹配的路线文件/并且所有其他路由都与未找到的页面匹配。

import HomeContainer from 'containers/home-container/home-container';
import PageNotFound from 'components/page-not-found/page-not-found';

const routes = [
  {
    path: '/',
    exact: true,
    component: HomeContainer
  },
  {
    path: '*',
    component: PageNotFound
  }
];

export default routes;

我遇到的问题是,当我在服务器上运行应用程序时,会在快速更改为 HomeContainer 路由之前呈现未找到的页面路由。

我已经确定发生这种情况是因为我的快递服务器正在向/json/version在它提出请求之前/,此路线与我的路线文件中的路线不匹配,因此呈现页面未找到组件。

现在我不明白的是为什么它提出这个请求以及如何停止page not found组件在主容器之前渲染。我已经尝试调试节点服务器,并且我最早可以找到引用该路径的位置是在名为的文件内的发出调用中_http_server.js

下面是调试器的屏幕截图以及我发现引用的 URL 的位置。

另外供参考,我在下面包含了我的快递服务器。

import express from 'express';
import React from 'react';
import { renderToString } from 'react-dom/server';
import { Provider } from 'react-redux';
import { StaticRouter, matchPath } from 'react-router-dom';
import serialize from 'serialize-javascript';
import expressStaticGzip from 'express-static-gzip';
import sourceMapSupport from 'source-map-support';

import routes from 'routes';
import configureStore from 'store';
import AppContainer from 'containers/app-container/app-container';

if (process.env.NODE_ENV === 'development') {
  sourceMapSupport.install();
}

const app = express();

app.use(expressStaticGzip('./static/assets'));

app.get('*', (req, res, next) => {
  const store = configureStore();

  /**
   * Load initial data into state
   * match requested URL path to the component in routes
   * check for 'fireInitialActions' method (found in the container components)
   * and dispatch if it exists
   */
  const routeComponentPromises = routes.reduce((accumulator, route) => {
    if (matchPath(req.url, route) && route.component && route.component.fireInitialActions) {
      accumulator.push(Promise.resolve(store.dispatch(route.component.fireInitialActions())));
    }

    return accumulator;
  }, []);

  Promise.all(routeComponentPromises)
    .then(() => {
      const context = {};
      const markup = renderToString(
        <Provider store={store}>
          <StaticRouter location={req.url} context={context}>
            <AppContainer />
          </StaticRouter>
        </Provider>
      );

      const initialData = store.getState();
      res.send(`
        <!DOCTYPE html>
        <html>
          <head>
            <title>Test</title>
            <script src='vendor.js' defer></script>
            <script src='app.js' defer></script>
            <script>window.__initialData__ = ${serialize(initialData)}</script>
          </head>
          <body>
            <div id="root">${markup}</div>
          </body>
        </html>
      `);
    })
    .catch(next);
});

app.listen(process.env.PORT || 3000, () => {
  console.log('Server is listening');
});

有谁知道为什么会发生这种情况以及我该如何解决我的问题?

编辑:这是显示该问题的视频 -https://d26dzxoao6i3hh.cloudfront.net/items/2z3y3f1x3N1D2e422W42/Screen%20Recording%202017-10-23%20at%2012.24%20pm.mov https://d26dzxoao6i3hh.cloudfront.net/items/2z3y3f1x3N1D2e422W42/Screen%20Recording%202017-10-23%20at%2012.24%20pm.mov


在运行我的节点应用程序后,我遇到了同样的问题--inspect钥匙。这些奇怪的 GET 请求/json and /json/version由 chrome 检查员发送。

所以,解决方案(就我而言)是:

  1. Go to chrome://inspect.
  2. 单击链接“打开 Node 专用开发工具”;
  3. Open Connection tab.
  4. 从列表中删除您的端点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Express.js 服务器端渲染 - 请求'/json/version/ 的相关文章

随机推荐

  • android-opencv 使用 matToBitmap/bitmapToMat 将 mat 转换为灰度

    我在 eclipse 中使用更新的 willowgarage opencv 库 我想将 mat 变量转换为灰度 我已经尝试了在网上找到的所有内容 但它们对我不起作用 这是我的代码 package com deneme deneme impo
  • 获取 Java 时区的夏令时转换日期

    我想知道在 Java 中最简单的方法来获取未来夏令时将发生变化的日期列表 一种相当不优雅的方法是简单地迭代多年的日子 并根据 TimeZone inDaylightTime 测试它们 这会起作用 而且我不担心效率 因为这只需要在每次我的应用
  • 我应该在 C# 项目中使用 WPF 还是 Windows 窗体应用程序?

    我正在开发一个基于客户端 服务器的应用程序 其中客户端应用程序将访问服务器数据库来存储计费信息 它还将具有报告生成功能 Windows 窗体在文档打印方面表现出色 但我在 WPF 中没有看到这样的功能或控件 如果我错了 请纠正我 我想要数据
  • &pointer 如何具有指向指针的类型?

    struct node int a int main struct node y 23 struct node x y return 0 这是我遇到的一些代码 我弄乱了代码并发现 x 有类型指针到指针 我很困惑这是怎么回事 所以我把它画出来
  • 如何从grails中的控制器调用服务

    我有一个服务类 我试图在我的控制器中调用该服务的方法 如下所示 class LogListController def ListLogDetails println We are inside List log Details gt par
  • AWS EventBridge - 读取事件档案

    有谁知道是否有一个 API 可以读取使用 EventBridge 归档功能归档的事件 我们的目标是进行事件重播 但开箱即用的事件重播功能对我们不起作用 因为我们需要保留事件的时间顺序 作为一种解决方法 我想知道是否有一个选项可以通过拖网事件
  • RxJava 在多个订阅者之间共享 Observable 的排放

    我有以下问题 我有一个可观察量正在做一些工作 但其他可观察量需要该可观察量的输出才能工作 我曾尝试多次订阅同一个可观察量 但在日志中我看到原始可观察量已启动多次 这就是我的观察结果 即创建对象 Observable create Obser
  • 仅当我激活工作表时,VBA 复制和粘贴才有效

    我正在工作表之间复制一些范围 但我不知道为什么只有在复制或粘贴工作表之前激活工作表时它才有效 这有效 s Activate s Range Cells 2 8 Cells lrow 8 Copy d Activate d Range Cel
  • Javascript 解析/评估顺序?

    这可能是一个棘手的问题 但我不明白为什么会这样 这会发出警报 function foo 但我希望在定义函数 foo 之前评估警报 有人可以解释我对解析 评估顺序的不理解 或者指出我不理解的资源吗 JavaScript 与 PHP 一样 跟踪
  • null 或empty 的更简单写法?

    我确信我在这里错过了一些东西 对于某个项目 我需要检查字符串是否为空或为空 有没有更简单的方法来写这个 if myString myString null 是的 有String IsNullOrEmpty https msdn micros
  • 字符串连接可以用于包含 SpEL 的应用程序 yml 值吗?

    我正在尝试定义一个 Spring 数据源 url 如下所示 spring datasource url jdbc vcap services compose for mysql credentials uri useSSL true req
  • 在 Rust 中逐行读取大文件[重复]

    这个问题在这里已经有答案了 我的 Rust 程序旨在逐行读取非常大 最多几 GB 的简单文本文件 问题是 这个文件太大 无法一次读取 或者将所有行传输到一个Vec
  • IntelliJ 自动完成替换函数名称

    我已经从 Eclipse 切换到 IntelliJ 但有一些东西我还没有找到 也没有在 google 上找到 How to get the autocomplete to replace the name of the function I
  • 无法销毁 Firebase 连接,导致热 Lambda 由于“Firebase 应用程序名称‘[DEFAULT]’已存在”而失败

    几个小时以来我一直在尝试我能想到的每一种方法 基本上 我正在运行一个 AWS Lambda 函数 它以客户端和服务器角色对我的 Firebase 应用程序执行一些工作 在 Lambda 上 我需要能够逆转firebase initializ
  • 多边形分解——去除凹点形成凸多边形

    我想解构以下以蓝色显示的多边形 从多边形中删除导致凹面的所有点 目前 我一直在尝试做的是 将每个点从多边形中取出 测试该点以查看它是否落在由该集合的其余部分创建的多边形内 如果为 true 则删除该点 如果为假 请保留要点 这在大多数情况下
  • 以“Managed”结尾的类名是什么意思 (C# .NET)?

    我对 C 比较陌生 所以请耐心等待 我了解托管代码和非托管代码之间的基本区别 但我仍然有点困惑何时使用某些方法 例如 某些类名称结尾中的 托管 一词意味着什么 这是否意味着他们受到管理 而其他所有人员则不受管理 例如 两者之间有什么区别Ae
  • iOS 12 iPad 拒绝启动请求 - Xcode

    直到昨天 我已经更新一个应用程序 5 年多了 没有出现任何问题 我将 iPad 更新到了 iOS 12 但是每次尝试运行它时 我都会收到以下消息 iPad 拒绝了发布请求 我在其他装有 iOS 11 的物理设备和模拟器上进行了测试 只有 i
  • 在 Ext.data 上下文中,JsonStore 和 JsonReader 之间的基本区别是什么?

    在 Ext data 上下文中 JsonStore 和 JsonReader 之间的基本区别是什么 我的意思是 当我应该使用 JsonStore 和当我应该使用 JsonReader 时 两者都提供相同的解决方案 实际上它们是两个不同的东西
  • 如何从 Firefox Add-on SDK 扩展启动正常下载

    我正在为 Firefox 开发附加 SDK 扩展 我发现我需要能够像用户请求一样启动下载 即显示正常的文件保存对话框或将文件保存到用户喜欢的任何位置 因为它可以在首选项 gt 内容下配置 有关下载的每一篇文章或文档似乎只考虑了我知道在哪里下
  • Express.js 服务器端渲染 - 请求'/json/version/

    我有一个正在运行的快速服务器来预渲染我的反应应用程序 我有一个将 HomeContainer 与基本路线相匹配的路线文件 并且所有其他路由都与未找到的页面匹配 import HomeContainer from containers hom