2015-08-18 87 views
2

在我的NodeJS应用程序的路由器中,我想渲染一个反应应用程序。由于它没有被浏览(并且在那里被重新生成),它在构建时返回unexpected token <错误。我发现如果我require("node-jsx").install()它不会返回我这个错误。 但node-jsx已弃用。有没有什么方法可以在不需要的情况下构建项目?摆脱node-jsx

var JSX = require('node-jsx').install(),//as we don't reactify it while building 
    React = require('react'), 
    Board = React.createFactory(require('../components/board')), 
    DataStore = require('../store/store'); 


    var router = require('express').Router(); 

    router.get('/', function(req, res) { 
     var initialState = {'users': DataStore.getUsers()}; 
     var markup = React.renderToString(
      Board(initialState) 
     ); 
     res.render('board', { 
      markup: markup, 
      state: JSON.stringify(initialState), 
      layout: 'boardLayout' 
     }); 
    }); 

    module.exports = router; 
+0

如果您的主板组件位于jsx中,则需要将其转换为js,然后才能通过反应进行呈现。董事会是一个jsx文件? – Mark

+0

是的,实际上它是一个jsx文件,但带有'.js'扩展名。 –

回答

3

node-jsx已弃用babel。而不是require('node-jsx').install();,您现在可以使用require('babel-register');

+0

早在2015年(当原始答案被写入时),'babel/register'是正确的。自那时起API已经明显更新了,我已经更新了我的答案。感谢您指出了这一点。 – Mark

+0

对于喊话部分感到抱歉,我和一位朋友在一起,这是一个内心的笑话。大声笑 – Jackstine

0

因为babel 6以上答案将无法正常工作。请改用babel-register。

建议您不要在生产中使用此设置。对于生产,您应该转储所有文件并使用节点server.js的行。