Node.js 使用节点进行ReactJS服务器端渲染
我遵循了以下教程: 在my server.js中:Node.js 使用节点进行ReactJS服务器端渲染,node.js,laravel,reactjs,laravel-5,ecmascript-6,Node.js,Laravel,Reactjs,Laravel 5,Ecmascript 6,我遵循了以下教程: 在my server.js中: 'use strict'; require("babel/register"); var React = require('react'); var express = require('express'); var path = require('path'); var bodyParser = require('body-parser'); var app = express(); app.use(bodyParser.json())
'use strict';
require("babel/register");
var React = require('react');
var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
app.use('/', function(req, res) {
try {
var view = path.resolve('public/src/' + req.query.module);
var component = require(view);
var props = req.body || null;
res.status(200).send(
React.renderToString(
React.createElement(component, props)
)
);
} catch (err) {
res.status(500).send(err.message);
}
});
app.listen(3000);
console.log('Listening carefully...')
但当我运行它时,我发现找不到模块'babel/register'
如果我将其注释掉,它会起作用,但我会在浏览器中看到以下内容:
Unexpected token import
我猜这是由于错误造成的
我怎样才能解决这个问题
我把它改成这样:
require('babel-register')({
presets: ['es2015', 'react']
});
...
更进一步,但现在在我的浏览器中,我得到:
React.renderToString is not a function
我的组成部分:
import React from 'react';
class HelloComponent extends React.Component {
render () {
return (
<h1>Hello, {this.props.name}!</h1>
);
}
}
HelloComponent.defaultProps = { name: 'World' };
export default HelloComponent;
从“React”导入React;
类HelloComponent扩展了React.Component{
渲染(){
返回(
你好,{this.props.name}!
);
}
}
HelloComponent.defaultProps={name:'World'};
导出默认HelloComponent;
for现在似乎不同了:使用require(“巴别塔寄存器”)代码>安装后
请参阅:这是一个类似的问题for现在似乎不同了:使用require(“巴别塔寄存器”)代码>安装后
请参阅:这是一个类似的问题看起来这段代码使用的是BabelJS版本5-那么您将在何时安装babel@5-应该有效
但是如果您替换require(“babel/register”)代码>带有要求(“巴别塔寄存器”)代码>和使用babel@6. 此外,您还需要添加带有babeljs()配置的.babelrc
文件
如果您希望为react组件的服务器端呈现准备使用配置,请看一下这个项目:(我是作者)
这不仅仅是服务器端渲染,它是一个完整的解决方案,允许您为PHP应用程序构建同构的js组件。这段代码似乎使用的是BabelJS版本5,所以您将在何时安装babel@5-应该有效
但是如果您替换require(“babel/register”)代码>带有要求(“巴别塔寄存器”)代码>和使用babel@6. 此外,您还需要添加带有babeljs()配置的.babelrc
文件
如果您希望为react组件的服务器端呈现准备使用配置,请看一下这个项目:(我是作者)
这不仅仅是服务器端渲染,它是一个完整的解决方案,允许您为PHP应用程序构建同构的js组件。这是因为在react 0.14中,此功能被移动到了单独的包react dom()。如何让它与我拥有的组件一起工作?即使将其导入到我的组件中,我仍然会得到相同的错误代码>并使用ReactDOM。renderToString
而不是React。renderToString
。或者,您也可以安装react-verison 0.13.xNow I just get ReactDom.renderToString不是一个函数:(请尝试var ReactDOMServer=require('react-dom/server');
和ReactDOMServer.renderToString()
这是因为在react 0.14中,此功能被移动到单独的包react-dom()。我怎样才能让它与我现有的一起工作?即使将它导入到我的组件中,我仍然会遇到相同的错误。Addvar-ReactDOM=require('react-dom'))
并使用ReactDOM.renderToString
而不是React.renderToString
。或者,您可以安装React-verison 0.13.xNow我刚得到ReactDOM.renderToString,它不是一个函数:(tryvar ReactDOMServer=require('React-dom/server');
和ReactDOMServer.renderToString()