Skip to content

Instantly share code, notes, and snippets.

@lucasassisrosa
Last active September 28, 2022 21:54
Show Gist options
  • Save lucasassisrosa/eecb9d2f10ad5688da04cbde5be91258 to your computer and use it in GitHub Desktop.
Save lucasassisrosa/eecb9d2f10ad5688da04cbde5be91258 to your computer and use it in GitHub Desktop.
Node.js plain simple Server
const http = require('http');
const fs = require('fs');
const requestListener = function (req, res) {
req.on('error', (err) => {
console.error(err);
res.statusCode = 400;
res.end('400: Bad Request');
return;
});
res.on('error', (err) => {
console.error(err);
console.log(err.stack);
res.end('');
});
function setAccessHeaders() {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
res.setHeader(
'Access-Control-Allow-Headers',
'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'
);
}
if (req.method === 'OPTIONS') {
setAccessHeaders();
res.setHeader('Access-Control-Max-Age', 1728000);
res.setHeader('Content-Type', 'text/plain charset=UTF-8');
res.setHeader('Content-Length', 0);
res.writeHead(204);
res.end('');
}
if (req.url === '/health' && req.method === 'GET') {
setAccessHeaders();
res.setHeader('Content-Type', 'application/json');
res.writeHead(200);
res.end('');
}
if (req.url === '/metrics' && req.method === 'GET') {
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Content-Type', 'text/plain');
const metrics = '';
res.writeHead(200);
res.end(metrics);
}
fs.readFile('index.html', (err, data) => {
if (!err && req.url === '/' && req.method === 'GET') {
setAccessHeaders();
res.setHeader('Content-Type', 'text/html; charset=UTF-8');
res.writeHead(200);
res.end(data);
} else {
res.end('');
}
});
};
const server = http.createServer(requestListener);
server.listen(process.env.PORT, () => {
console.log(`Running at ${process.env.PORT});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment