이 요점을 확인하십시오 . 참고로 여기에서 재현하고 있지만 요점은 정기적으로 업데이트되었습니다.
Node.JS 정적 파일 웹 서버 임의의 디렉토리에서 서버를 시작하려면 경로에 넣으십시오 (선택적 포트 인수 사용).
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");
최신 정보
요지는 CSS 및 JS 파일을 처리합니다. 나는 그것을 직접 사용했습니다. "이진"모드에서 읽기 / 쓰기를 사용하는 것은 문제가되지 않습니다. 이는 파일이 파일 라이브러리에 의해 텍스트로 해석되지 않고 응답에 반환 된 컨텐츠 유형과 관련이 없음을 의미합니다.
코드의 문제점은 항상 "text / plain"컨텐츠 유형을 반환한다는 것입니다. 위의 코드는 컨텐츠 유형을 반환하지 않지만 HTML, CSS 및 JS에만 사용하는 경우 브라우저에서 해당 유형을 유추 할 수 있습니다. 내용 유형이 잘못된 유형보다 낫습니다.
일반적으로 컨텐츠 유형은 웹 서버의 구성입니다. 그래서이 해결되지 않을 경우 미안 해요 당신의 문제를, 그러나 그것은 단순한 개발 서버로 나를 위해 일을하고 다른 사람들을 도와 줄 알았는데. 응답에 올바른 컨텐츠 유형이 필요한 경우, joeytwiddle이있는 것으로 명시 적으로 정의하거나 기본값이 적절한 Connect와 같은 라이브러리를 사용해야합니다. 이것에 대한 좋은 점은 간단하고 독립적입니다 (의존성 없음).
그러나 나는 당신의 문제를 느낍니다. 결합 된 솔루션은 다음과 같습니다.
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);
var 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;
}
var headers = {};
var contentType = contentTypesByExtension[path.extname(filename)];
if (contentType) headers["Content-Type"] = contentType;
response.writeHead(200, headers);
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");