zoukankan      html  css  js  c++  java
  • Node实现静态服务器2

    1.Node不是Apache,Node做的事顶层路由设计,Apache帮你做了一切,而Node你要自己设计,自己手写。所以现在的缺点就是全部都是200,没有304。缓存问题。

    2.继上次的getMime,这里是完成作业,读取JSON,把所有的文件类型对应起来。注意这里的getMime因为又有了一层fs的readFile的异步,这里返回最后的mime不一定是我们要的mime。这里的解决办法是把读取写在回调里,回调函数的执行时在异步之后,这里的mime已经完成了对应,同步-》异步-》回调,用上callback。

    资源:

    代码:

    var http = require("http");
    var fs = require("fs");
    var url = require("url");
    var path = require("path");
    
    var server = http.createServer(function(req, res) {
    
        var pathname = url.parse(req.url).pathname;
        //判断此时用户输入的地址是文件夹地址还是文件地址
        //如果是文件夹地址,那么自动请求这个文件夹中的index.html
        if(pathname.indexOf(".") == -1) {
            pathname += "./index.html";
        }
        //输入的网址是127.0.0.1/images/logo.png
        //实际请求的是./static/images/logo.png
        var fileURL = "./" + path.normalize("./static/" + pathname);
        //得到拓展名
        var extname = path.extname(pathname);
        //把文件读出来
        fs.readFile(fileURL, function (err, data) {
            //读完之后做的事情
            if(err) {
                //文件不存在
                res.writeHead(404,{"Content-Type":"text/html;charset=UTF8"});
                res.end("404,页面没有找到");
            }
            //读完之后做的事情
            getMime(extname, function (mime) {
                res.writeHead(200,{"Content-Type":mime});
                res.end(data);
            });
        });
    
    });
    
    
    server.listen(80,"127.0.0.1");
    
    function getMime(extname,callback) {
        //读取mime.json文件,得到JSON,根据extname key,返回对应的value
        //读取文件
        fs.readFile("./mime.json",function (err, data) {
            if(err) {
                throw Error("找不到mime.json文件!");
                return ;
            }
            //转成JSON
            var mimeJSON = JSON.parse(data);
            var mime = mimeJSON[extname] || "text/plain";
            //读完执行回调函数,mime类型字符串,就是它的参数
            callback(mime);
        });
    }

     这时候的慕课,css,js都能加载了:

  • 相关阅读:
    jmeter压测学习8-压测带token的接口
    jmeter压测学习7-登录参数化(CSV 数据文件设置)
    jmeter压测学习6-HTTP Cookie管理器
    jmeter压测学习5-XPath提取器
    jmeter压测学习4-正则表达式提取
    jmeter压测学习3-提取json数据里面的token参数关联
    docker学习11-上传本地镜像到镜像仓库
    docker学习10-注册docker hub账号
    python测试开发django-73.django视图 CBV 和 FBV
    The user operation is waiting for "Building workspace" to complete
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7748618.html
Copyright © 2011-2022 走看看