gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 04:45:17 25 4
gpt4 key购买 nike

我有一个快速服务器正在运行以预呈现我的 React 应用程序。我有一个路由文件,该文件将 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 路由之前呈现未找到页面路由。

我已经确定这是因为我的 express 服务器在向 / 发出请求之前向 /json/version 发出请求,这条路线没有t 匹配我的路由文件中的一个,因此呈现页面未找到组件。

现在我不明白为什么它会发出这个请求,以及如何停止在 home 容器之前呈现的 page not found 组件。我试过调试 Node 服务器,最早可以找到引用此路径的地方是在名为 _http_server.js

的文件中的 emit 调用中

下面是调试器的屏幕截图以及我在其中找到引用的 URL。

Debugger Screenshot

同样作为引用,我在下面包含了我的快速服务器。

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

最佳答案

我在使用 --inspect 键运行我的 Node 应用程序后立即遇到了同样的问题。这些对 /json/json/version 的奇怪 GET 请求是由 chrome inspector 发送的。

所以,解决方案(在我的例子中)是:

  1. 转到 chrome://inspect
  2. 点击链接“为 Node 打开专用的 DevTools”;
  3. 打开连接标签。
  4. 从列表中删除您的端点。

关于javascript - Express.js 服务器端渲染 - 请求 '/json/version/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46887933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com