Skip to content

Instantly share code, notes, and snippets.

@sl4m
Created August 6, 2010 06:33
Show Gist options
  • Save sl4m/510943 to your computer and use it in GitHub Desktop.
Save sl4m/510943 to your computer and use it in GitHub Desktop.
var sys,
url,
querystring,
http,
searchUser,
listRepos,
postHandler;
sys = require('sys');
url = require('url');
querystring = require('querystring');
http = require("http");
searchUser = function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<form action="/result" method="post">' +
'GitHub user: <input type="text" name="github_user">' +
'<input type="submit" value="Search"></form>');
res.end();
};
listRepos = function(req_data, res) {
var user,
github,
headers,
request;
user = req_data.github_user;
github = http.createClient(80, "github.com");
headers = {
'host':'github.com',
"User-Agent": "NodeJS HTTP Client",
"Content-Length": "0"
};
request = github.request("GET", "/api/v2/json/repos/show/" + user, headers);
request.addListener('response', function(response) {
if (response.statusCode > 200) {
res.writeHead(response.statusCode, {'Content-Type': 'text/plain'});
res.write("No user found.")
res.end();
return;
}
response.setEncoding('utf8');
var responseBody = [];
response.addListener("data", function(chunk) {
responseBody.push(chunk);
});
response.addListener("end", function() {
res.writeHead(200, {'Content-Type': 'text/html'});
var repos,
repoNames,
i,
max,
repoObj;
repoNames = '';
repos = JSON.parse(responseBody.join(""));
//repos = querystring.parse(responseBody.join(""));
//console.log(sys.inspect(repos));
max = repos["repositories"].length;
for (i=0; i<max; i+=1) {
repoObj = repos["repositories"][i];
repoNames += '<strong><a href=' + repoObj["url"] + '>' + repoObj["name"] + '</a></strong><br />'
}
res.write("<h1>" + user + ' has ' + repos["repositories"].length +
" repositories:</h1><br /><hr>" + repoNames);
res.end();
});
});
request.end();
};
postHandler = function(req, res, callback) {
var _request,
_content;
_request = {};
_content = '';
if (req.method == "POST") {
req.addListener('data', function(chunk) {
_content += chunk;
});
req.addListener('end', function() {
_request = querystring.parse(_content);
return callback(_request, res);
});
}
};
http.createServer(function (req, res) {
switch (url.parse(req.url)["pathname"]) {
case '/':
searchUser(req, res);
break;
case '/result':
postHandler(req, res, function(req_data, res) {
listRepos(req_data, res);
});
break;
}
}).listen(6633)
console.log('Server running at http://localhost:6633');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment