RxJS + node.js HTTP服务器实现?

RxJS + node.js HTTP服务器实现?

问题描述:

直到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的东西,但很少有文档在网上找到。

告诉我代码有什么问题,如果你知道更好的实现,请分享。 谢谢。

当第一个请求到达时,在主题上调用on完成可观察序列。你能否再次尝试删除该行。

我希望它有帮助。

艾哈迈德·阿里Akkas

+0

我做到这一点,它提出的所有要求只是挂... – MaxWillmo

使用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 ? –