-
-
Save ryanflorence/701407 to your computer and use it in GitHub Desktop.
var http = require("http"), | |
url = require("url"), | |
path = require("path"), | |
fs = require("fs") | |
port = process.argv[2] || 8888; | |
http.createServer(function(request, response) { | |
var uri = url.parse(request.url).pathname | |
, filename = path.join(process.cwd(), uri); | |
path.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; | |
} | |
response.writeHead(200); | |
response.write(file, "binary"); | |
response.end(); | |
}); | |
}); | |
}).listen(parseInt(port, 10)); | |
console.log("Static file server running at\n => http://localhost:" + port + "/\nCTRL + C to shutdown"); |
Small typo: fs = require("fs")
is missing a comma at the end of the line, making port
on the next line a global variable.
Thank you for sharing!
Fixed the whole code. Enjoy :)
var http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs"),
port = process.argv[2] || 8888;
http.createServer(function(request, response) {
var uri = url.parse(request.url).pathname
, filename = path.join(process.cwd(), uri);
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;
}
response.writeHead(200);
response.write(file, "binary");
response.end();
});
});
}).listen(parseInt(port, 10));
console.log("Static file server running at\n => http://localhost:" + port + "/\nCTRL + C to shutdown");
Hi, Everyone:
Problem: There is a failure in the JavaScript code (server.js) to route a var to the following directory: ./public/index.html.
Symptoms: HTTP Error 403.14 - Forbidden.
Request for Support: What is the correct JavaScript to route var to a particular directory?
URL References:
1.) GitHub URL link: https://github.com/CforED/WebSite/blob/master/server.js
2.) Gist URL link: https://gist.github.com/CforED/177a2e73dfb87313576376fc00a2c9f4.js
3.) GitHub URL link to website:
https://github.com/CforED/WebSite/tree/master/public
Hal
I created a new one that handles MIME types and uses ES6+
https://gist.github.com/amejiarosario/53afae82e18db30dadc9bc39035778e5
Got an error with path.exists, changed it to fs.exists and the snippet worked fine.
@kovid-rathee I ran in to the same issue and your solution worked!
Hey, guys what do you think about this article?
he best Node.js framework for your project: Express.js, Koa.js or Sails.js is express js the best framework for Node js?
Awesome! I am new to Node.js and was trying to figure out how to configure this...This worked with a minor update as givne in another post creationix/howtonode.org#88
Thank you very much!
ty. min req, what i was after
path.exists has been deprecated. If you want a sync check then
if (!fs.statSync(filename)) {
response.writeHead(404, {'Content-Type': 'text/plain'})
response.write('404 Not Found\n')
response.end()
return
}
even better how about the handler's fs stuff all async with callbacks
fs.stat(filename, function(err,stats) {
if (err) {
response.writeHead(404, {'Content-Type': 'text/plain'})
response.write('404 Not Found\n')
response.end()
return
}
if (stats.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
}
response.writeHead(200)
response.write(file, 'binary')
response.end()
})
})
Thanks a lot :)
Thanks a lot, but it can be hijacked
This is insecure, someone can request /../../../etc/shadow
or similar to read any file they want.
thanks ...it's great, that why I'm looking for it
path.exists is now called fs.exists
This is insecure, someone can request
/../../../etc/shadow
or similar to read any file they want.
I guess you're not familiar with how path.join works, because as coded here it won't resolve to a directory outside of cwd directory branch.
fs.exists
is deprecated. fs.statSync
can be used to check if file path exists, as in dkebler's code above.
Thank you for this!
Incredible article, thanks for sharing it! I think this article will also be useful for you - Node js vs Python.
Thanks a lot for info! Was searching for it! The Attract Group's blog on lean product development provides a clear and concise overview, offering valuable insights into the methodology's principles and benefits. Their approach emphasizing efficiency and customer value is particularly compelling, providing a useful resource for entrepreneurs looking to streamline their development process and reduce waste.
If anyone is interested in ES6+ version, I've revamped it here.