diff options
Diffstat (limited to 'examples/server.js')
-rw-r--r-- | examples/server.js | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/examples/server.js b/examples/server.js new file mode 100644 index 0000000..dab1c04 --- /dev/null +++ b/examples/server.js @@ -0,0 +1,140 @@ +var fs = require('fs'); +var path = require('path'); +var http = require('http'); +var argv = require('minimist')(process.argv.slice(2)); +var server; +var dirs; + +function listDirs(root) { + var files = fs.readdirSync(root); + var dirs = []; + + for (var i = 0, l = files.length; i < l; i++) { + var file = files[i]; + if (file[0] !== '.') { + var stat = fs.statSync(path.join(root, file)); + if (stat.isDirectory()) { + dirs.push(file); + } + } + } + + return dirs; +} + +function getIndexTemplate() { + var links = dirs.map(function (dir) { + var url = '/' + dir; + return '<li onclick="document.location=\'' + url + '\'"><a href="' + url + '">' + url + '</a></li>'; + }); + + return ( + '<!doctype html>' + + '<html>' + + '<head>' + + '<title>axios examples</title>' + + '<style>' + + 'body {padding:25px;}' + + 'ul {margin:0; padding:0; list-style:none;}' + + 'li {padding:5px 10px;}' + + 'li:hover {background:#eee; cursor:pointer;}' + + 'a {text-decoration:none; color:#0080ff;}' + + '</style>' + + '<body>' + + '<ul>' + + links.join('') + + '</ul>' + ); +} + +function sendResponse(res, statusCode, body) { + res.writeHead(statusCode); + res.write(body); + res.end(); +} + +function send200(res, body) { + sendResponse(res, 200, body || '<h1>OK</h1>'); +} + +function send404(res, body) { + sendResponse(res, 404, body || '<h1>Not Found</h1>'); +} + +function pipeFileToResponse(res, file, type) { + if (type) { + res.writeHead(200, { + 'Content-Type': type + }); + } + fs.createReadStream(path.join(__dirname, file)).pipe(res); +} + + +dirs = listDirs(__dirname); + +server = http.createServer(function (req, res) { + var url = req.url; + + // Process axios itself + if (/axios\.min\.js$/.test(url)) { + pipeFileToResponse(res, '../dist/axios.min.js', 'text/javascript'); + return; + } + if (/axios\.min\.map$/.test(url)) { + pipeFileToResponse(res, '../dist/axios.min.map', 'text/javascript'); + return; + } + if (/axios\.amd\.min\.js$/.test(url)) { + pipeFileToResponse(res, '../dist/axios.amd.min.js', 'text/javascript'); + return; + } + if (/axios\.amd\.min\.map$/.test(url)) { + pipeFileToResponse(res, '../dist/axios.amd.min.map', 'text/javascript'); + return; + } + + // Process / + if (url === '/' || url === '/index.html') { + send200(res, getIndexTemplate()); + return; + } + + // Format request */ -> */index.html + if (/\/$/.test(url)) { + url += 'index.html'; + } + + // Format request /get -> /get/index.html + var parts = url.split('/'); + if (dirs.indexOf(parts[parts.length - 1]) > -1) { + url += '/index.html'; + } + + // Process index.html request + if (/index\.html$/.test(url)) { + if (fs.existsSync(path.join(__dirname, url))) { + pipeFileToResponse(res, url, 'text/html'); + } else { + send404(res); + } + } + + // Process server request + else if (new RegExp('(' + dirs.join('|') + ')\/server').test(url)) { + if (fs.existsSync(path.join(__dirname, url + '.js'))) { + require(path.join(__dirname, url + '.js'))(req, res); + } else { + send404(res); + } + } + else { + send404(res); + } +}); + +const PORT = argv.p || 3000; + +server.listen(PORT); + +console.log("Examples running on " + PORT); |