>  기사  >  웹 프론트엔드  >  Nodejs_node.js로 구현된 정적 서버 인스턴스

Nodejs_node.js로 구현된 정적 서버 인스턴스

WBOY
WBOY원래의
2016-05-16 16:28:431297검색

cnodejs.org의 정적 서버 예제를 참조하여 캐시와 압축이 포함된 다음 nodejs 정적 서버 예제를 작성했습니다.

코드 복사 코드는 다음과 같습니다.

/**
* 정적 파일 서버 테스트 예시
* 사용자: xuwm
* 일시 : 13-5-17
* 시간 : 오전 8시 38분
* 이 템플릿을 변경하려면 파일 설정 | ​*/
var 포트=3333;
var http = require("http");
var url = require("url");
var fs = require("fs");
var 경로 = require("경로");
var mime = require("./mime").types;
var config = require("./config");
var zlib = require("zlib");
//创建http服务端
var server=http.createServer(함수(요청,응답){
    var obj= url.parse(request.url);
    response.setHeader("서버","노드/V8");
    console.log(obj);
    var 경로명=obj.pathname;
    if(경로 이름.slice(-1)==="/"){
        경로명=경로명 config.Welcome.file;   //默认取当前默认下的index.html
    }
    var realPath = path.join("assets", path.normalize(pathname.replace(/../g, "")));
    console.log(realPath) ;
    var pathHandle=function(realPath){
    //사용fs.stat방법获取文件
        fs.stat(realPath,function(err,stats){
            if(err){
                response.writeHead(404,"찾을 수 없음",{'Content-Type':'text/plain'});
                response.write("요청 " realPath "를 찾을 수 없습니다.");
                response.end();
            }그밖에{
                if(stats.isDirectory()){
                }그밖에{
                    var ext = path.extname(realPath);
                    내선 = 내선? ext.slice(1) : '알 수 없음';
                    var contentType = mime[ext] || "텍스트/일반";
                    response.setHeader("Content-Type", contentType);
                   var lastModified = stats.mtime.toUTCString();

                    var ifModifiedSince = "If-Modified-Since".toLowerCase();
                    response.setHeader("Last-Modified", lastModified);

                   if (ext.match(config.Expires.fileMatch)) {

                        var 만료 = 새 날짜();
                        만료.setTime(expires.getTime() config.Expires.maxAge * 1000);
                        response.setHeader("Expires",expires.toUTCString());
                        response.setHeader("Cache-Control", "max-age=" config.Expires.maxAge);
                    }

                   if (request.headers[ifModifiedSince] && lastModified == request.headers[ifModifiedSince]) {
                        console.log("从浏览器cache里取")
                        response.writeHead(304, "수정되지 않음");
                        response.end();
                    } 그 밖의 {
                        var raw = fs.createReadStream(realPath);
                        var acceptEncoding = request.headers['accept-encoding'] || "";
                        var match = ext.match(config.Compress.match);

                       if (일치 && acceptEncoding.match(/bgzipb/)) {
                            response.writeHead(200, "Ok", {'Content-Encoding': 'gzip'});
                            raw.pipe(zlib.createGzip()).pipe(응답);
                        } else if (일치 && acceptEncoding.match(/bdeflateb/)) {
                            response.writeHead(200, "Ok", {'Content-Encoding': 'deflate'});
                            raw.pipe(zlib.createDeflate()).pipe(응답);
                        } 그 밖의 {
                            response.writeHead(200, "확인");
                            raw.pipe(응답);
                        }
                    }
                }
            }
        });

    }
    pathHandle(실제 경로);
});
server.listen(포트);
console.log("http 서버 실행 포트:" port);

运行行方式为:여기命令行里切换到상면적JS의文件目录,然后输入 node JS文件name

浏览器内输入http://localhost:3333/就会看到效果。

--상상상면의 현대적인 两个模块

mime.js

复主代码 代码如下:

수출.유형 = {

  "css": "텍스트/css",

  "gif": "이미지/gif",

  "html": "텍스트/html",

  "ico": "이미지/x-아이콘",

  "jpeg": "이미지/jpeg",

  "jpg": "이미지/jpeg",

  "js": "텍스트/자바스크립트",

  "json": "application/json",

  "pdf": "응용 프로그램/pdf",

  "png": "이미지/png",

  "svg": "이미지/svg xml",

  "swf": "application/x-shockwave-flash",

  "tiff": "이미지/tiff",

  "txt": "텍스트/일반",

  "wav": "오디오/x-wav",

  "wma": "오디오/x-ms-wma",

  "wmv": "동영상/x-ms-wmv",

  "xml": "텍스트/xml"
};

config.js

复主代码 代码如下:

수출.만료 = {
    파일 일치: /^(gif|png|jpg|js|css)$/ig,
    최대 연령: 60 * 60 * 24 * 365
};

exports.Compress = {
    일치: /css|js|html/ig
};

exports.Welcome = {
    파일: "index.html"
};

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.