美文网首页
前四节 复习

前四节 复习

作者: 向上而活 | 来源:发表于2019-08-22 22:18 被阅读0次

    Node. js开发服务器,数据、路由。本地关心的效果,交互;
    Node js实际上是极客开发出的一个小玩具,不是银弹,有着别人不具备的怪异特点:
    单线程、Non- blocking IO、 Event Driven,实际上是一个特点。
    首先,Node不为每个用户开辞一个线程,所以非常极端的选择了单线程。
    单线程,要照顾所有的用户,那么必须有非阻塞IO,否则一个人的IO就把别人、自己都阻塞了
    一旦有非阻IO,一个人如果IO去了,就会放弃CPU的使用权,换成另一个人使用CPU(或者执行此人后面的语句)所以CPU的利用100%。
    第一个人IO结束了,就要用事件来通知线程,执行回调函数。此时必须有事件环,就有一个排队调度机制。
    Node中有超过半数的C++代码,在搭建事件环。

    Node is和别的老牌3P不一样:
    没有自己的语法,使用V8引所以就是JS。
    V8引摹解析JS的,效率非常高,并且V8中很多东西都是异步的。Node就是将V8中的一些功能自己没有重写(别人做了,自己就站在巨人肩膀上),移植到了服务器上。
    没有web容器,就是安装配置完成之后,没有一个根目录。

    系统中默认http端口为80端口。

    //读取不同类型的文件(img、html、css、js........)
    var http=require("http");
    var fs=require("fs");
    var url=require("url");
    var path=require("path");
    
    var server=http.createServer(function(req,res){
        //这里如果不用req.url来if判断,那么用户不管输入什么网址,做的事情都一样
        //得到地址
        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();
        //把文件读出来
        fs.feadFile(fileurl,function(err,data){
            //读完之后做的事情
            if(err){
                //文件不存在
                res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"})
                res.end("404,页面没有找到");
            }
            //读完之后做的事情
            getMime(extname,function(mime){
                res.writeHead(200,{"Conment-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";
            
            callback(mime);
        })
    }
    

    相关文章

      网友评论

          本文标题:前四节 复习

          本文链接:https://www.haomeiwen.com/subject/hfoosctx.html