/** * a barebones HTTP server in JS * to serve three.js easily * * @author zz85 https://github.com/zz85 * * Usage: node simplehttpserver.js * * do not use in production servers * and try * npm install http-server -g * instead. */ var port = 8000, http = require( 'http' ), urlParser = require( 'url' ), fs = require( 'fs' ), path = require( 'path' ), currentDir = process.cwd(), mimeTypes = { "html": "text/html", "js": "text/javascript", "css": "text/css", "jpg": "image/jpeg", "png": "image/png", "gif": "image/gif", "ogg": "audio/ogg", "mp3": "audio/mpeg", "mp4": "video/mp4", "txt": "text/plain", "bin": "application/octet-stream" }; port = process.argv[ 2 ] ? parseInt( process.argv[ 2 ], 0 ) : port; function handleRequest( request, response ) { var urlObject = urlParser.parse( request.url, true ); var pathname = decodeURIComponent( urlObject.pathname ); console.log( '[' + ( new Date() ).toUTCString() + '] ' + '"' + request.method + ' ' + pathname + '"' ); var filePath = path.join( currentDir, pathname ); fs.stat( filePath, function ( err, stats ) { if ( err ) { response.writeHead( 404, {} ); response.end( 'File not found!' ); return; } if ( stats.isFile() ) { fs.readFile( filePath, function ( err, data ) { if ( err ) { response.writeHead( 404, {} ); response.end( 'Opps. Resource not found' ); return; } var fileType = filePath.split( '.' ).pop().toLowerCase(); response.writeHead( 200, { "Content-Type": mimeTypes[ fileType ] || mimeTypes[ 'bin' ] } ); response.write( data ); response.end(); } ); } else if ( stats.isDirectory() ) { fs.readdir( filePath, function ( error, files ) { if ( error ) { response.writeHead( 500, {} ); response.end(); return; } var l = pathname.length; if ( pathname.substring( l - 1 ) != '/' ) pathname += '/'; response.writeHead( 200, { 'Content-Type': 'text/html' } ); response.write( '\n' + filePath + '' ); response.write( '

' + filePath + '

' ); response.write( '' ); } ); } } ); } http.createServer( handleRequest ).listen( port ); require( 'dns' ).lookup( require( 'os' ).hostname(), function ( err, addr, fam ) { console.log( 'Running at http://' + addr + ( ( port === 80 ) ? '' : ':' ) + port + '/' ); } ); console.log( 'Three.js server has started...' ); console.log( 'Base directory at ' + currentDir );