最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

java - Using React with Nashorn throws "ReferenceError: "console" is not defined" - Stack Ov

programmeradmin7浏览0评论

Im using "react": "~0.12.2"

And the following code:

@RequestMapping("/")
@ResponseBody
private String home() throws ScriptException, IOException {
    loadReact();
    InputStream jsStream = resourceLoader.getResource("classpath:public/js/server.js").getInputStream();
    engine.eval(new InputStreamReader(jsStream));
    return engine.eval("renderServerside()").toString();
}

private void loadReact() throws ScriptException, IOException {
    InputStream jsStream = resourceLoader.getResource("classpath:public/lib/react/react.js").getInputStream();

    // React expects 'window' or 'global' to be set
    engine.eval("var global = this");
    engine.eval(new InputStreamReader(jsStream));
}

My server.js looks like this:

function renderServerside() {
    var MyComponent = React.createClass({
        render: function () {
            return React.DOM.h1(null, 'Hi, ' + this.props.msg)
        }
    });

    return React.renderComponentToString(MyComponent({msg: 'World!'}));
}

And getting this exception:

javax.script.ScriptException: ReferenceError: "console" is not defined in <eval> at line number 18108] with root cause

jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "console" is not defined

So how can nashorn not provide a console?

I tired to implement the basic example from this page: React with Nashorn

Im using "react": "~0.12.2"

And the following code:

@RequestMapping("/")
@ResponseBody
private String home() throws ScriptException, IOException {
    loadReact();
    InputStream jsStream = resourceLoader.getResource("classpath:public/js/server.js").getInputStream();
    engine.eval(new InputStreamReader(jsStream));
    return engine.eval("renderServerside()").toString();
}

private void loadReact() throws ScriptException, IOException {
    InputStream jsStream = resourceLoader.getResource("classpath:public/lib/react/react.js").getInputStream();

    // React expects 'window' or 'global' to be set
    engine.eval("var global = this");
    engine.eval(new InputStreamReader(jsStream));
}

My server.js looks like this:

function renderServerside() {
    var MyComponent = React.createClass({
        render: function () {
            return React.DOM.h1(null, 'Hi, ' + this.props.msg)
        }
    });

    return React.renderComponentToString(MyComponent({msg: 'World!'}));
}

And getting this exception:

javax.script.ScriptException: ReferenceError: "console" is not defined in <eval> at line number 18108] with root cause

jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "console" is not defined

So how can nashorn not provide a console?

I tired to implement the basic example from this page: React with Nashorn

Share Improve this question edited Jan 20, 2015 at 16:17 daniula 7,0284 gold badges35 silver badges49 bronze badges asked Dec 24, 2014 at 12:14 TarionTarion 17.2k13 gold badges77 silver badges113 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 8

Rhino before it didn't provide one either. You can implement your own console with something like

console = { 
    log: print,
    warn: print,
    error: print
};

For full blown console support you might need to add more functions. See: Console

发布评论

评论列表(0)

  1. 暂无评论