gpt4 book ai didi

node.js - 从 Meteor 服务器端路由使用 node-rio

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:23 25 4
gpt4 key购买 nike

我正在尝试通过服务器端路由使用 Meteor 访问 Rserve 服务器来调用 R 代码。允许访问 Rserve 的 Node.js 模块是 node-rio我在 meteorhacks:npm 中使用了 Async.wrap 函数Meteor 包包装了“evaluate”方法。当我尝试在浏览器中访问路由路径“/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})

最佳答案

两个错误:

  1. 正如您已经指出的,rio 希望回调作为参数中回调字段的值,而不是直接在参数本身中。
  2. 您的结果(“1”)实际上并不是有效的 JSON。

这有效:

Router.route('/rio', function() {                                               
var rio = Meteor.npmRequire('rio');
var evalSync = Async.wrap(function(exp, callback) {
rio.evaluate(exp, {callback: callback});
});
var result = evalSync('1');
console.log("Result: " + result);

// JSON
this.response.writeHead(200, {'Content-Type': 'application/json'});
this.response.end(JSON.stringify({result: result}));
}, {
where: 'server'
});

关于node.js - 从 Meteor 服务器端路由使用 node-rio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28163016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com