558860
我想通过domain把截获的错误返回给客户端(下面的实现是模拟一个异步异常),第一次请求没有问题,但是第二次以后浏览器都会一直处于pending状态,我的理解是第二次请求使用了第一次请求domain里面的对像,也就是说B域访问了A域下面的变量,这样跨域访问数据导致第二次以后的请求拿到的response对像都是A域这个上下文中的,而第一次请求后response已经无效了,也就是说A域这个response没用了,每次都调用response.writeHead都是无效的。当一个进程中有公共变量的时候就会出现这样的问题,求解大神解决这个问题!!
var http = require('http'),
events = require('events');
domain = require('domain'),
net = require('net'),
util = require('util'),
shareObject = null;
function InheritEventObject()
{
events.EventEmitter.apply(this);
}
util.inherits(InheritEventObject, events.EventEmitter);
var cnt = 0;
http.createServer(function(request, response) {
var rdomain = domain.create();
rdomain.data = ++cnt;
rdomain.on('error', function(err) {
console.log(this.data);//每次都是1
response.writeHead(500);
response.end(err.stack);
});
rdomain.run(function(){
var obj = getShareObject();
obj.emit("throwError");
});
}).listen(8080);
function getShareObject()
{
if(shareObject === null)
{
shareObject = new InheritEventObject();
shareObject.on("throwError", function(){
throw new Error("hello error");
});
}
return shareObject;
}