Skip to content

Instantly share code, notes, and snippets.

@jalalhejazi
Created April 29, 2013 19:11
Show Gist options
  • Save jalalhejazi/5483942 to your computer and use it in GitHub Desktop.
Save jalalhejazi/5483942 to your computer and use it in GitHub Desktop.
node: server.js WebServer

#server#

This creates a basic static http server that can be started from the command line, pointed to a directory and given a port.

##Requires:##

  • npm
    • npm update - make sure to run npm update to get the node-static library.
    • npm link - to put "server" in your path.

##Usage:##

server [-p <port-number>] [path]

All arguments are optional.

Running server without any arguments will start an http server on port 8080 service the current working directory.

To start a server on port 8081 and serves content in ~/Sites:

$> server -p 8081 ~/Sites

##FileSystemBrowser##

To run a simple http server in Node.js which allows you to browse and download any server's file directly from your browser:

$> node HttpFileSystem.js HttpFileSystem Server running at http://localhost:1111/

Now I can browse my FileSystem from browser.

#!/usr/bin/env node
// source ~/.bash_profile
// Jalal.Hejazi
// Really simple http server in Node.js which allows you to browse and download
// any server's file directly from your browser.
var http = require('http');
var fs = require('fs');
var port = 1111;
var httpserver = http.createServer(onRequest);
httpserver.listen(port, "127.0.0.1", serverCreated_callback());
function onRequest(request, response) {
var pureUrl = request.url;
if (pureUrl == '/favicon.ico') return;
var candidateQS = require('url').parse(request.url)['query'];
pureUrl = UrlToFsPath(pureUrl);
console.log(pureUrl + ' is requested');
try {
if (candidateQS != null) {
// a file is requested
candidateQS = candidateQS.substr(5, candidateQS.lenght);
var fileData = fs.readFileSync(candidateQS);
response.writeHead(200);
response.write(fileData);
response.end();
} else {
var htmlOutput = FormatHtmlFileList(pureUrl);
response.writeHead(200, {
'Content-Type': 'text/html'
});
response.end(htmlOutput, 'utf8');
}
} catch (error) {
response.writeHead(404, {
'Content-Type': 'text/html'
});
response.end();
}
}
function serverCreated_callback() {
console.log('HttpFileSystem Server running at http://localhost:%s/', port );
}
function UrlToFsPath(pureUrl) {
if (pureUrl.substr(-1) != "/") {
pureUrl += "/";
}
return unescape(pureUrl.replace(/\+/g, " "));
}
function FormatHtmlTableRow(absolutePath, filename) {
var fileStats = fs.statSync(absolutePath);
var htmlRow;
if (fileStats.isFile()) {
htmlRow = "<tr><td>[-]</td><td style='width:300px'><a href='/?file=" + absolutePath + "'>" + filename + "</a> </td><td>" + fileStats['ctime'] + "</td><td>" + fileStats['size'] + "</td>";
} else {
htmlRow = "<tr><td>[+]</td><td style='width:300px'><a href='" + absolutePath + "'> " + filename + "</a> </td><td>" + fileStats['ctime'] + "</td>";
}
return htmlRow;
}
function FormatHtmlFileList(pureUrl) {
var htmlOutput = '<h3>Folder: ' + pureUrl + '</h3>';
htmlOutput += "<a href='" + pureUrl + "' >Go back</a>";
htmlOutput += '<table>';
htmlOutput += "<tr><td> </td><td style='width:300px'> Name </td><td>Create Date</td><td>Size</td>";
var directories = fs.readdirSync(pureUrl);
for (var i in directories) {
var absolutePath = pureUrl + directories[i];
htmlOutput += FormatHtmlTableRow(absolutePath, directories[i]);
}
htmlOutput += '</table>';
return htmlOutput;
}
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Node Server running</title>
<style type="text/css">
body{
background-color: black;
color: green;
margin-left: 2em;
}
</style>
</head>
<body>
<div>
<img src="data:image/png;base64,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"/>
</div>
<h1>
Running nodejs WebServer ....
</h1>
</body>
</html>
{
"name": "server"
, "version": "0.0.1"
, "private": true
, "dependencies": {
"node-static": ">= 0.5.6"
},
"main": "server.js",
"bin": { "server": "./server.js" }
}
#!/usr/bin/env node
// source ~/.bash_profile
// using: Terminal Zsh
// Jalal.Hejazi
;(function() {
var fsio = require('fs');
var path = require('path');
var static = require('node-static');
function showUsageAndExit() {
console.log(" usage: server [-p <port-number>] [path]\n");
console.log(" usage: server [-port <port-number>] [path]\n");
console.log(" usage: server \n");
console.log(" -p <port-number>\tThe port number to use");
console.log(" [path]\t\tPath to serve. Defaults to current directory\n");
process.exit();
}
var dir = "./";
var port = 8080;
var args = process.argv.splice(2);
if (args.length > 0 && args.length < 4) {
for (var i = 0; i < args.length; i++) {
try {
switch (args[i]) {
case "-p":
case "-port":
port = parseInt(args[++i]);
break;
case "-help":
case "--help":
showUsageAndExit();
break;
default:
dir = args[i];
break;
}
} catch(e) {
showUsageAndExit();
}
}
}
dir = path.resolve(dir);
var stats = fsio.lstatSync(dir);
if (!stats.isDirectory()) {
showUsageAndExit();
}
//
// Create a node-static server instance to serve the './public' folder
//
var srv = new(static.Server)(dir);
require('http').createServer(function(request, response) {
request.addListener("end",
function() {
srv.serve(request, response);
// Serve files!
});
}).listen(port);
console.info("\n\t Jalal.Hejazi \n\t Node Sever running http://localhost:" + port.toString() + "/\n\t in '" + dir + "'");
console.info("\n\t usage: $ server -p %s ~/Sites" , port );
console.info("\n\t usage: npm link --> to put server in your path ");
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment