- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试让服务器端/同构渲染与 react-router 一起为 react 应用程序工作。
我的route.js
:
import React from 'react';
import { Route } from 'react-router';
import Test from './components/test';
export default (
<Route path="/test" component={ Test }>
</Route>
);
我的server.js
:
'use strict';
require('babel-core/register')
var path = require('path');
var express = require('express');
var logger = require('morgan');
var compression = require('compression');
var http = require('http');
var ReactDOM = require('react-dom/server');
var Router = require('react-router');
var match = Router.match;
var RoutingContext = Router.RoutingContext;
var routes = require('./src/routes');
var app = express();
var server;
var PORT = process.env.PORT || 3000
app.use(logger('dev'));
app.use(compression());
// Set path to public assets
app.use(express.static(path.join(__dirname, 'public')));
app.get('*', function(req, res) {
console.log('URL: ', req.url);
console.log('Routes: ', routes);
match({ routes: routes, location: req.url }, (error, redirectLocation, renderProps) => {
console.log('Render Props: ', renderProps)
if (error) {
res.status(500).send(error.message)
} else if (redirectLocation) {
res.redirect(302, redirectLocation.pathname + redirectLocation.search);
} else if (renderProps) {
res.status(200).send(ReactDOM.renderToString(React.createElement(RoutingContext, renderProps)))
} else {
res.status(404).send('Not found')
}
})
})
server = http.createServer(app);
server.listen('3000', () => {
console.log('Express server listening on port ' + PORT);
});
所以当我运行 npm run start 时,它只是调用 server.js
上的 node
。服务器正常启动,但所有请求,包括 /test
都以 404 返回。
我控制台记录了 req.url,它返回了正确的 url。我对“路线”文件做了同样的事情,它肯定找到了正确的文件。以下是这些日志的输出:
Express server listening on port 3000
URL: /test
Routes: { default:
{ '$$typeof': Symbol(react.element),
type:
{ [Function]
displayName: 'Route',
createRouteFromReactElement: [Function: createRouteFromReactElement],
propTypes: [Object] },
key: null,
ref: null,
props: { path: '/test', component: [Object] },
_owner: null,
_store: {} } }
Render Props: undefined
GET /test 404 19.596 ms - 9
然而,renderProps
始终未定义,响应返回 404。我认为我正确地遵循了这些示例,但我不确定哪里出错了。
最佳答案
经过长时间的调试后,我遇到了类似的问题,我发现了一些可以解决的问题解决了这个问题,以下是我在我的应用:-
i) 首先你的测试组件应该返回一个正确的 dom 元素, react 可以渲染而不是仅仅渲染组件。您应该返回 null 或包含所需元素的适当容器元素。请参阅下面的示例。(这是我在应用程序中犯的第一个错误。)
export default class Test extends React.Component {
constructor(props) { super(props); }
render () {
return (
<div>
<h1>opopooopppopo</h1>
<p>This is your world.</p>
</div>
);
}
}
ii) 在您的代码库中使用 RouterContext 而不是 RoutingContext 这对我有用,这是我代码中的主要问题。因为 RoutingContext 在新版本的 react-router 中已经被deprecated。此更改解决了我的问题。
res.status('200').send(ReactDOM.renderToString(<RouterContext {...renderProps}/>));
(注意:请不要忘记从 react-router 模块导入 RouterContext。)
//从react-router导入路由上下文语句
var RouterContext = Router.RouterContext;
iii) 如果以上方法都不起作用,则使用 routes.default 而不是仅使用 routes 来更改匹配函数。 更改:match({routes : routes, location} to match({routes : routes.default, location},如果您使用的是 babel 6,则此更改是必要的。结合 RoutingContext 和 RouterContext 试试这个因为我不知道你使用的是哪个版本的 react-router 和 babel。所以组合是:-
a) match({ routes : routes }) 与 res.status('200').send(ReactDOM.renderToString(<RoutingContext {.. .renderProps}/>));
b) match({ routes : routes }) 与 res.status('200').send(ReactDOM.renderToString(<RouterContext {.. .renderProps}/>));
c) match({ routes : routes.default }) 与 res.status('200').send(ReactDOM.renderToString(<RoutingContext { ...renderProps}/>));
d) match({ routes : routes.default }) 与 res.status('200').send(ReactDOM.renderToString(<RouterContext { ...renderProps}/>));
关于javascript - 服务器端未定义 renderProps/React/React-Router + Node/Express.js 的同构渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37286939/
据我所知,Aurelia 不支持提到的服务端渲染 here . 但问题是:是否可以通过一些技巧/解决方法来做到这一点? 最明显的想法是使用 Phantom、Nightmare.js 或其他任何工具在服
我目前正在开发一个在客户端和服务器之间使用一些共享 JS 的项目。技术堆栈包括 Node v6、Webpack、React 等。 有一个“共享”目录,服务器和客户端需要一个名为rules.js的文件。
我正在运行一个使用 React 和 webpack 的同构应用程序,一切都很好。不过,我正在努力处理的一件事是在渲染组件之前预加载 css。 我一直在尝试使用 导入我的 sass 文件(以便 webp
我找到了 2 个工具来解决服务器端模块加载器的问题:webpack-isomorphic-tools和 universal-webpack .有人可以向我解释这些东西如何工作的关键步骤吗?它如何捕获/
我基于 this repo 中的初学者工具包构建了一个同构 React 应用程序.它使用 webpack 构建生产代码。 问题是,我需要将服务器上的一些环境变量的值暴露给浏览器中的客户端代码,而无需重
我有一些同构的 JavaScript。我在客户端使用 RequireJS。 (function() { 'use strict'; function wrapper(require)
在 recursion-schemes 包定义了以下类型: newtype Fix f = Fix (f (Fix f)) newtype Mu f = Mu (forall a. (f a -> a
我正在努力了解服务器端路由和重定向与服务器端呈现/同构 javascript 之间的区别。如果它们不同,它们有何不同。 最佳答案 Universal (Isomorphic)Javascript 可以
我对 JavaScript 知识相当了解。我们计划使用 React、Redux、es6 等启动同构 Web 应用程序。我们有很多 API 调用需要集成。在开始之前,我想知道是否有可用的样板,或者最好一
我将应用程序重建为同构方法。在我的本地环境中一切正常(本地和在线 Node 版本相同)但不幸的是,将文件上传到我的网络服务器后,我收到以下错误消息: SyntaxError: .../index.js
我正在尝试创建一个 universal javascript (正式名称为同构 javascript)包。这意味着它应该作为 Node 模块工作,但也可以在浏览器中顺利运行 假设它看起来像这样: //
所以我几乎完成了我的第一个(同构)ReactJS,当我们部署它时,完成 build.js 有点慢。一个建议是使用 CDN 来分离 Assets 获取(cdn0、cdn1、cdn2...),我想知道如何
所以,我最近一直在摆弄一些同构的 React + Flux,说实话,发现一些概念相当令人困惑。我一直在研究有关如何构建同构应用程序的最佳实践并寻求建议。 假设您正在创建一个由同一 REST API 支
我正在 Next.js remote fetching 上做以下练习。我无法理解和适应的是练习从 http://api.tvmaze.com 获取数据。 . 数据如下: [ {"score":24,
我似乎遇到了一个奇怪的错误。我目前正在使用 Redux 同构,并且还包括 redux-thunk 作为异步操作的中间件。这是我的商店配置: // Transforms state date from
我在 CNTK 中调用 trainer.restore_from_checkpoint 时遇到以下异常。 'This' function is not equivalent (isomorphic)
我已经使用 nodejs 创建了库,并使用 webpack 将其捆绑,以便可以在客户端使用。 但如果我尝试将捆绑文件用于我的 Node 应用程序,它就无法工作。那么,我该如何创建同时适用于客户端和服务
我开始创建基于 Node.js 的同构 React/Redux 应用程序。该项目的一个要求是基于“移动”和“桌面” View 的特定组件的“自适应”渲染。我已经实现了 Redux Action 和缩减
关于同构通量应用程序中存储数据填充的问题。 (我使用的是 react、alt、iso 和 node,但理论适用于其他示例) 我有一个 flux 'store' ( http://alt.js.org/
我最近使用 React-Redux-Express-Mongoose 堆栈构建了一些同构/通用项目。 在我的 Mongoose 模型中包含很多业务逻辑。作为一个非常基本的示例(请原谅我的 ES6):
我是一名优秀的程序员,十分优秀!