Skip to content

Instantly share code, notes, and snippets.

@kiraind
Created June 5, 2019 09:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kiraind/89b16090ad5704167dcd64efc7597077 to your computer and use it in GitHub Desktop.
Save kiraind/89b16090ad5704167dcd64efc7597077 to your computer and use it in GitHub Desktop.
Static&Post Node.js template
const http = require('http')
const url = require('url')
const path = require('path')
const fs = require('fs')
const port = process.argv[2] || 8888
http.createServer(function (request, response) {
if(request.method === 'GET') {
handleGet(request, response)
} else if(request.method === 'POST') {
handlePost(request, response)
} else {
response.writeHead(501, { 'Content-Type': 'text/plain' })
response.write('Unknown method\n')
response.end()
}
}).listen(parseInt(port, 10))
function handleGet(request, response) {
const uri = url.parse(request.url).pathname
let filename = path.join(process.cwd(), 'static', uri)
const contentTypesByExtension = {
'.html': 'text/html',
'.css': 'text/css',
'.js': 'text/javascript'
}
fs.exists(filename, function (exists) {
if (!exists) {
response.writeHead(404, { 'Content-Type': 'text/plain' })
response.write('404 Not Found\n')
response.end()
return
}
if (fs.statSync(filename).isDirectory()) filename += '/index.html'
fs.readFile(filename, 'binary', function (err, file) {
if (err) {
response.writeHead(500, { 'Content-Type': 'text/plain' })
response.write(err + '\n')
response.end()
return
}
const headers = {}
const contentType = contentTypesByExtension[path.extname(filename)]
if (contentType) {
headers['Content-Type'] = contentType
}
response.writeHead(200, headers)
response.write(file, 'binary')
response.end()
})
})
}
function handlePost(request, response) {
}
console.log('Static file server running at\n => http://localhost:' + port + '/\nCTRL + C to shutdown')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment