Maison  >  Article  >  interface Web  >  Une instance de serveur statique implémentée par Nodejs_node.js

Une instance de serveur statique implémentée par Nodejs_node.js

WBOY
WBOYoriginal
2016-05-16 16:28:431297parcourir

En me référant à l'exemple de serveur statique sur cnodejs.org, j'ai écrit l'exemple de serveur statique nodejs suivant, qui inclut le cache et la compression. Le code est le suivant :
.

Copier le code Le code est le suivant :

/**
* Exemple de test de serveur de fichiers statique
* Utilisateur : xuwm
*Date : 13-5-17
* Heure : 8h38
* Pour modifier ce modèle, utilisez Fichier | Paramètres | Modèles de fichiers.
​*/
varport=3333;
var http = require("http");
var url = require("url");
var fs = require("fs");
var chemin = require("chemin");
var mime = require("./mime").types;
var config = require("./config");
var zlib = require("zlib");
//创建http服务端
var server=http.createServer(function(request,response){
    var obj= url.parse(request.url);
    réponse.setHeader("Serveur","Node/V8");
    console.log(obj);
    var pathname=obj.pathname;
    if(pathname.slice(-1)==="/"){
        pathname=chemin d'accès config.Welcome.file;   //默认取当前默认下的index.html
    >
    var realPath = path.join("assets", path.normalize(pathname.replace(/../g, "")));
    console.log(realPath) ;
    var pathHandle=fonction (realPath){
    //用fs.stat方法获取文件
        fs.stat(realPath,function(err,stats){
            si (erreur) {
                réponse.writeHead(404,"not found",{'Content-Type':'text/plain'});
                réponse.write("la requête " realPath " n'est pas trouvée ");
                réponse.end();
            }autre{
                si(stats.isDirectory()){
                }autre{
                    var ext = chemin.extname(realPath);
                    poste = poste ? ext.slice(1) : 'inconnu';
                    var contentType = mime[ext] || "texte/plain";
                    réponse.setHeader("Content-Type", contentType);

                   var lastModified = stats.mtime.toUTCString();
                    var ifModifiedSince = "If-Modified-Since".toLowerCase();
                    réponse.setHeader("Last-Modified", lastModified);

                  if (ext.match(config.Expires.fileMatch)) {
                        var expire = new Date();
                        expires.setTime(expires.getTime() config.Expires.maxAge * 1000);
                        réponse.setHeader("Expires", expires.toUTCString());
                        réponse.setHeader("Cache-Control", "max-age=" config.Expires.maxAge);
                    >

                   if (request.headers[ifModifiedSince] && lastModified == request.headers[ifModifiedSince]) {
                        console.log("从浏览器cache里取")
                        réponse.writeHead(304, "Non modifié");
                        réponse.end();
                    } autre {
                        var raw = fs.createReadStream(realPath);
                        var acceptEncoding = request.headers['accept-encoding'] || "";
                        var matched = ext.match(config.Compress.match);

                       if (matched && acceptEncoding.match(/bgzipb/)) {
                            réponse.writeHead(200, "Ok", {'Content-Encoding': 'gzip'});
                            raw.pipe(zlib.createGzip()).pipe(response);
                        } else if (matched && acceptEncoding.match(/bdeflateb/)) {
                            réponse.writeHead(200, "Ok", {'Content-Encoding': 'deflate'});
                            raw.pipe(zlib.createDeflate()).pipe(response);
                        } autre {
                            réponse.writeHead(200, "Ok");
                            raw.pipe(réponse);
                        >
                    >
                >
            >
        });

    }
    pathHandle(realPath);
});
serveur.écouter(port);
console.log("serveur http exécuté dans le port :" port);

JS utilise JS pour les actifs, et index.html,demo.js.

运行方式为:在命令行里切换到上面的JS的文件目录,然后输入 node JS文件名

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

--补上上面代码里缺少的两个模块

mime.js

复制代码 代码如下 :

exports.types = {

  "css": "texte/css",

  "gif": "image/gif",

  "html": "texte/html",

  "ico": "image/x-icône",

  "jpeg": "image/jpeg",

  "jpg": "image/jpeg",

  "js": "texte/javascript",

  "json": "application/json",

  "pdf": "application/pdf",

  "png": "image/png",

  "svg": "image/svg xml",

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

  "tiff": "image/tiff",

  "txt": "text/plain",

  "wav": "audio/x-wav",

  "wma": "audio/x-ms-wma",

  "wmv": "video/x-ms-wmv",

  "xml": "texte/xml"
};

config.js

复制代码 代码如下 :

exports.Expires = {
    fileMatch : /^(gif|png|jpg|js|css)$/ig,
    Âge max : 60*60*24*365
};

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

exports.Bienvenue = {
    fichier : "index.html"
};

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn