Skip to content

Instantly share code, notes, and snippets.

@formula1
Last active August 29, 2015 14:21
Show Gist options
  • Save formula1/888cbc3b332aa7451374 to your computer and use it in GitHub Desktop.
Save formula1/888cbc3b332aa7451374 to your computer and use it in GitHub Desktop.
Super Agent and Request inside Webworker
node_modules
*.log

To Start

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
<!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
});
});
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment