I wrote a NodeJS HTTP server specifically for serving static files. I didn't bother much about security since the server is going to be used locally in my Electron application.
function buildStaticServer() {
const fs = require("fs");
const urlModule = require("url");
return require("http").createServer(function(req, res) {
var parsedUrl = urlModule.parse(req.url, true);
var completePath = __dirname + parsedUrl.pathname;
console.log(completePath);
fs.stat(completePath, function(err, statObj){
//we first check if the pathName exists
if(err){
res.writeHead(404);
return res.end("404 Directory not found");
}
if(statObj.isDirectory()){
//if the pathname is a directory, we're gonna try to send the index.html in that directory
fs.readFile(completePath + "/index.html", function(err, data){
if(err){
res.writeHead(404);
return res.end("404 File Corrupt or Not Found");
}
res.writeHead(200);
res.write(data);
return res.end();
})
}
fs.readFile(completePath, function(err, data){
if(err){
res.writeHead(404);
res.end("404 File Corrupt or Not Found");
return;
}
res.writeHead(200);
res.write(data);
return res.end();
})
});
});
}
var staticServer = buildStaticServer().listen(9000);
-
\$\begingroup\$ You could just import express. blog.modulus.io/nodejs-and-express-static-content \$\endgroup\$PatrickS– PatrickS2016年03月29日 11:17:00 +00:00Commented Mar 29, 2016 at 11:17
-
1\$\begingroup\$ What is your question exactly? \$\endgroup\$A. Romeu– A. Romeu2016年03月29日 11:34:13 +00:00Commented Mar 29, 2016 at 11:34
-
\$\begingroup\$ @PatrickS I didn't wanna use express here since I am developing an Electron app and I feel like it's too heavy for a simple static file server. \$\endgroup\$bool3max– bool3max2016年03月29日 17:26:28 +00:00Commented Mar 29, 2016 at 17:26
1 Answer 1
There are more efficient ways to do this. Now you are buffering the whole file content into memory, when you perform fs.readFile(...)
. I recommend that you use a readStream
, that for example using fs.createReadStream(<path>)
, pipe it into res
. This way you will begin sending the file content earlier, and stop wasting your node processes memory. Also consider moving require
to the top of your code, it is a bad practice to call require
from function body.