【发布时间】:2015-01-27 04:00:17
【问题描述】:
我正在尝试使用 Meteor 通过服务器端路由访问 Rserve 服务器以调用 R 代码。允许访问 Rserve 的 Node.js 模块是 node-rio 我使用了 meteorhacks:npm Meteor 包中的 Async.wrap 函数来包装“评估”方法。当我尝试在浏览器中访问路由路径“/rio”时,控制台日志中写入了“1”,这对于 R 中命令“1”的评估是正确的,但 Chrome 挂起并显示消息“正在等待对于本地主机”。它不会进入下一行,并且永远不会显示“结果:1”。消息“net::ERR_EMPTY_RESPONSE 最终会出现在 Chrome 中。
Router.route('/rio', function() {
var rio = Meteor.npmRequire('rio');
var evalSync = Async.wrap(rio, 'evaluate');
var result = evalSync('1');
console.log("Result: " + result);
// JSON
this.response.writeHead(200, {'Content-Type': 'application/json'});
this.response.end(result);
}, {
where: 'server'
});
“evaluate”有一个回调函数参数,但它被包裹在一个选项参数中并被访问:
rio.evaluate(R_COMMAND, {callback: CALLBACK_FUNCTION})
【问题讨论】: