Node.js 使用节点进行ReactJS服务器端渲染

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())

我遵循了以下教程:

在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());
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()。我怎样才能让它与我现有的一起工作?即使将它导入到我的组件中,我仍然会遇到相同的错误。Add
var-ReactDOM=require('react-dom'))
并使用
ReactDOM.renderToString
而不是
React.renderToString
。或者,您可以安装React-verison 0.13.xNow我刚得到ReactDOM.renderToString,它不是一个函数:(try
var ReactDOMServer=require('React-dom/server');
ReactDOMServer.renderToString()