Я пытаюсь получить доступ к серверу Rserve с помощью Meteor через маршрут на стороне сервера для вызова R-кода. Модуль Node.js, обеспечивающий доступ к Rserve, называется node-rio. Я использовал Async.wrap. в пакете meteorhacks:npm Meteor для переноса метода "evaluate". Когда я пытаюсь получить доступ к пути маршрута «/rio» в браузере, в журнал консоли записывается «1», что правильно для оценки команды «1» в R, но 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})