2012-05-02 14 views
7

Я был хорошо с node.js до реализации RxJS.RxJS + node.js Выполнение HTTP-сервера?

Вот мой суд КОДИРУЙТЕ studying-

Реактивного-Extensions/rxjs-узел https://github.com/Reactive-Extensions/rxjs-node


rx_http.js
(RxJS обертки HTTP Lib из Node.js)

var Rx = require("./rx.min"); 
var http = require("http"); 
for(var k in http) 
{ 
    exports[k] = http[k]; 
} 
exports.createServer = function() 
{ 
    var subject = new Rx.AsyncSubject(); 
    var observable = subject.asObservable(); 
    observable.server = http.createServer(function (request, response) 
    { 
     subject.onNext({ request:request, response:response }); 
     subject.onCompleted(); 
    }); 
    return observable; 
}; 

server.js

var http = require('./rx_http'); 

// rxServer 
var serverObservable = http.createServer(); 
var port = 3000; 
serverObservable.server.listen(port); 
console.log("Server listening on port: "+port); 

// HTTP request event loop function 
serverObservable.subscribe(function (data) 
{ 
    var req = data.request; 
    console.log(req.headers); 

    var res = data.response; 
    res.writeHead(200, {'Content-Type':"text/html"}); 
    res.end("hello world"); 

    console.log("res content out"); 
}); 

// exceptiopn 
process.on('uncaughtException', function (err) 
{ 
    console.log(['Caught exception:', err.message].join(" ")); 
}); 

код заканчивается с разовым «привет мир» вывода в браузер, и RxServer перестает реагировать на другой доступ (brwoser перезарядка и т.д.).

Я нахожусь в курсе работы RxJS, но в Интернете мало документов.

Сообщите мне, что не так с кодом, и если вы знаете, что лучше реализованы, пожалуйста, поделитесь. Спасибо.

ответ

3

Вызов завершенного объекта, когда первый запрос поступает, завершает наблюдаемую последовательность. Не могли бы вы удалить эту строку, попробуйте еще раз.

Надеюсь, это поможет.

Ахмет Али Akkas

+0

Я сделал это, и он сделал все запросы просто повесить ... – MaxWillmo

5

Использование Rx.Subject вместо Rx.AsyncSubject в rx_http.js.

AsyncSubject кэширует последнее значение onNext() и передает его всем наблюдателям по завершении. AsyncSubject

exports.createServer = function() 
{ 
    var subject = new Rx.Subject(); 
    var observable = subject.asObservable(); 
    observable.server = http.createServer(function (request, response) 
    { 
     subject.onNext({ request:request, response:response }); 
    }); 
    return observable; 
}; 
+1

любую идею, как использовать node_module запрос с Rx? Nodejs на стороне сервера. Как использовать https://www.npmjs.com/package/request с https://www.npmjs.com/package/rx, чтобы сделать запрос GET на https://www.reddit.com/r/javascript.json ? –

Смежные вопросы