2012-05-02 87 views
7

直到RxJS實現之前,我一直使用node.js。RxJS + node.js HTTP服務器實現?

這裏是我的審判代碼studying-

反應的擴展/ rxjs節點 https://github.com/Reactive-Extensions/rxjs-node


rx_http.js
(node.js中的HTTP LIB的RxJS包裝)

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

當第一個請求到達時,在主題上調用on完成可觀察序列。你能否再次嘗試刪除該行。

我希望它有幫助。

艾哈邁德·阿里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

知道怎樣使用,其中Rx node_module請求? Nodejs服務器端的實現。如何使用https://www.npmjs.com/package/request和https://www.npmjs.com/package/rx向GET請求https://www.reddit.com/r/javascript.json ? –