git clone
npm install
npm start
All errors will be displayed. Currently the bugs at hand are:
- Request cannot access XHR because its within a webworker
- Superagent also cannot but it doesn't realize until the actual request happens
node_modules | |
*.log |
<!doctype html> | |
<html> | |
<head> | |
<script type="text/javascript" src="/one.js" ></script> | |
</head> | |
<body> | |
<form> | |
<p>URL: <input type="text" name="url" /></p> | |
<p> | |
<input type="radio" name="xhr" value="superagent" checked>SuperAgent | |
<br> | |
<input type="radio" name="xhr" value="request">Request | |
</p> | |
<p><button type="submit" >Make Get Request</button></p> | |
</form> | |
<div class="output"></div> | |
<ul class="errors"></ul> | |
</body> | |
</html> |
var work = require("webworkify"); | |
var req = work(require("./worker-request")); | |
var sa = work(require("./worker-superagent")); | |
var form, output, text, errors; | |
var errlist = function(e){ | |
errors.innerHTML += "<li>"+e.message+"</li>"; | |
}; | |
var messlist = function(e){ | |
if(e.data.event !== "result") return; | |
if(e.data.error){ | |
output.style.backgroundColor = "#F00"; | |
output.style.color = "#FFF"; | |
output.innerHTML = e.data.error.stack.replace(/\n/g,"<br/>"); | |
}else{ | |
output.style.backgroundColor = "#FFF"; | |
output.style.color = "#000"; | |
output.innerHTML = e.data.data; | |
} | |
}; | |
req.addEventListener("message",messlist); | |
sa.addEventListener("message",messlist); | |
req.addEventListener("error",errlist); | |
sa.addEventListener("error",errlist); | |
window.addEventListener("load",function(){ | |
errors = document.querySelector(".errors"); | |
form = document.querySelector("form"); | |
text = form.querySelector("input[name=url]"); | |
form.onsubmit = function(e){ | |
switch(form.querySelector("input[type=radio]:checked").value){ | |
case "request": req.postMessage(text.value); break; | |
case "superagent": sa.postMessage(text.value); break; | |
} | |
return false; | |
}; | |
output = document.querySelector(".output"); | |
}); |
{ | |
"name": "superagent-webworker", | |
"version": "1.0.0", | |
"description": "", | |
"main": "server.js", | |
"scripts": { | |
"test": "echo \"Error: no test specified\" && exit 1", | |
"start": "node server.js" | |
}, | |
"author": "formula1 <[email protected]> (https://github.com/formula1)", | |
"license": "ISC", | |
"dependencies": { | |
"browserify": "latest", | |
"express": "latest", | |
"open": "0.0.5", | |
"request": "^2.55.0", | |
"superagent": "latest", | |
"webworkify": "latest" | |
} | |
} |
var express = require("express"); | |
var browserify = require("browserify"); | |
var open = require("open"); | |
var app = express(); | |
app.get("/one.js",function(req,res,next){ | |
var b = browserify("./a.js") | |
.bundle(); | |
b.on("error",next); | |
res | |
.status(200) | |
.set("Content-Type","application/javascript"); | |
b.pipe(res); | |
}); | |
app.get("/",function(req,res,next){ | |
res.sendFile(__dirname+"/a.html"); | |
}); | |
app.listen(8000,function(){ | |
open("http://localhost:8000"); | |
}); |
var sa = require("superagent"); | |
var request = require("request"); | |
module.exports = function(self){ | |
self.addEventListener("message",function(e){ | |
request(e.data.data, function (error, response, body) { | |
if(error){ | |
return self.postMessage({ | |
event:"result", | |
error:e | |
}); | |
} | |
self.postMessage({ | |
event:"result", | |
error:body | |
}); | |
}); | |
}); | |
}; |
var sa = require("superagent"); | |
module.exports = function(self){ | |
self.addEventListener("message",function(e){ | |
sa.get(e.data.data).end(function(e,res){ | |
if(e){ | |
return self.postMessage({ | |
event:"result", | |
error:e | |
}); | |
} | |
self.postMessage({ | |
event:"result", | |
error:res.body | |
}); | |
}); | |
}); | |
}; |