美文网首页
Node基础备注

Node基础备注

作者: 强某某 | 来源:发表于2018-04-21 17:22 被阅读0次

    模块

    http模块

    基本案例:
    let http=require('http');
    let server=http.createServer(function(requset,response){
        response.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
        response.end("Hello Node!");
    });
    server.listen(3000);
    
    

    url模块

    var url=require("url");
    url.parse("http://www.baidu.com");
    
    Url {
      protocol: 'http:',
      slashes: true,
      auth: null,
      host: 'www.baidu.com',
      port: null,
      hostname: 'www.baidu.com',
      hash: null,
      search: null,
      query: null,
      pathname: '/',
      path: '/',
      href: 'http://www.baidu.com/' }
    
    第二个参数为true:则会把返回对象中的query从字符串转换为对象
    url.parse("http://www.baidu.com",true);
    Url {
      protocol: 'http:',
      slashes: true,
      auth: null,
      host: 'www.baidu.com',
      port: null,
      hostname: 'www.baidu.com',
      hash: null,
      search: '?name=zengqiang&age=18',
      query: { name: 'zengqiang', age: '18' },
      pathname: '/',
      path: '/?name=zengqiang&age=18',
      href: 'http://www.baidu.com/?name=zengqiang&age=18' }
    
    
    其他方法:
      url.format(urlObj);//url.parse的逆向操作
      url.resolve(from,to);//添加或者替换地址的二级目录
    
    let path="http://www.baidu.com/info";
        let p1=url.resolve(path,"/one");
        let path1="http://www.baidu.com";
        let p2=url.resolve(path,"/two");
        console.log(p1,p2);
        //http://www.baidu.com/one http://www.baidu.com/two
    说明:没有二级路径(包含参数)就是追加,有的话就是替换
    

    fs模块


    fs.state:检测是文件还是目录
    fs.mkdir:创建目录
    fs.writeFile:创建写入文件,参数三是可省略的,代表字符编码
    fs.appendFile:追加文件
    fs.readFile:读取文件
    fs.readdir:读取目录
    fs.rename:重命名
    fs.rmdir:删除目录
    fs.unlink:删除文件


    基本案例:
    let http=require('http');
    let fs=require('fs');
    let server=http.createServer(function(requset,response){
        response.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
        fs.readFile('./笔记.md',function(err,data){
            response.end(data.toString());
        });
        fs.stat('./b.js',(err,stat)=>{
            console.log(`是文件吗:${stat.isFile()},${stat.isDirectory()}`)
        });
        fs.writeFile('./测试.txt','写入的内容','utf8',function(err){
            if(err){
                console.log("创建写入文件失败!");
            }
        });
    });
    server.listen(3000);
    
    
    读取文件目录列表:
    let http=require('http');
    let fs=require('fs');
    let server=http.createServer(function(requset,response){
        response.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
        let filesArr=[];
        fs.readdir('./',(err,files)=>{
            if(err){
                console.log("读取目录失败!");
            }else{
                (function getFile(i){
                    //循环结束
                    if(i==files.length){
                        //打印所有的目录名称
                        console.log(filesArr);
                        return;
                    }
                    fs.stat(files[i],(err,stat)=>{
                        if(stat.isDirectory()){
                            filesArr.push(files[i]);
                        }
                        getFile(i+1);
                    })
                })(0)
            }
            
        });
        response.end("info");
        
    });
    server.listen(3000);
    

    fs文件流

    读取流:
    let http=require('http');
    let fs=require('fs');
    let server=http.createServer(function(requset,response){
        response.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
        let rs=fs.createReadStream("./package.json");
        rs.on("data",(chunk)=>{
            response.end(chunk);
        });
        rs.on("end",()=>{
            console.log("读取完毕");
        })
        rs.on("error",(error)=>{
            console.log(`异常信息${error}`);
        })
    });
    server.listen(3000);
    
    
    写入流:
    let ws=fs.createWriteStream("./package1.json");
        ws.write("data",'utf8');
        ws.end();//标记写入完成,之后写入操作无效
        ws.on('finish',function(){//end对应的事件
            console.log("写入完成");
        });
        ws.on("error",(err)=>{
            console.log(err);
        })
    
    管道流:
    let http=require('http');
    let fs=require('fs');
    let server=http.createServer(function(requset,response){
        response.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
        let rs=fs.createReadStream("./package.json");
        let ws=fs.createWriteStream("./package1.json");
        rs.pipe(ws);
    });
    server.listen(3000);
    

    CommonJs规划

    暴露方式一:
    let tools={
        add:function(a,b){
            return a+b;
        }
    }
    module.exports=tools;
    
    
    let http=require('http');
    let url=require('url');
    let tools=require('./b.js');
    let server=http.createServer(function(requset,response){
        response.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
        response.end(tools.add(1,3)+"");
    });
    server.listen(3000);
    
    
    暴露方式二:
    let tools={
        add:function(a,b){
            return a+b;
        }
    }
    exports.tools=tools;
    
    
    let http=require('http');
    let url=require('url');
    let tools=require('./b.js');
    let server=http.createServer(function(requset,response){
        response.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
        console.log(tools);
        response.end(tools.tools.add(1,3)+"");
    });
    server.listen(3000);
    说明:此种方式调用是tools.tools.add(1,3)这样调用,可以打印tools得知结果是{ tools: { add: [Function: add] } }。区别于方式一。
    
    

    npm 命令


    npm list :当前目录安装的包
    npm install:安装包
    npm uninstall:卸载包
    npm info 包名:查看包信息
    npm install jquery@1.8.0:安装指定版本


    package.json相关


    创建:
    cnpm init
    cnpm init --yes:强制生成
    安装:cnpm install
    cnpm install 包名 --save:写入package.json里面的dependencies

    cnpm install 包名 --save-dev:写入package.json里面的devDependencies

    区别:
    dependencie 配置当前程序所依赖的其他包。
    devDependencie 配置当前程序所依赖的其他包,只会下载模块,而不下载这些模块的测试和文档框架

    ^表示第一位版本号不变,后面两位取最新的
    ~表示前两位不变,最后一个取最新
    *表示全部取最新
    例如:"ejs":"^4.13.3"


    静态文件服务器

    const http=require('http');
    const path=require('path');
    const url=require('url');
    const fs=require('fs');
    let server=http.createServer((req,res)=>{
        //去除多余参数获取纯粹路径
        let pathname=url.parse(req.url,true).pathname;
        console.log(pathname);
        if(pathname!='/favicon.ico'){
            if(pathname=='/') pathname='/index.html';
            fs.readFile('./static'+pathname,(err,data)=>{
                if(err){
                    fs.readFile("./static/404.html",(err,data)=>{
                        res.end(data);
                    });
                }else{
                    pathname=path.extname(pathname);//扩展名
                    getExtName(pathname,(ext)=>{
                        res.writeHead(200,{"Content-Type":""+ext+";charset='utf-8'"});
                        res.end(data);
                    });
                }
            })
        }
    });
    server.listen(8000);
    /**
    *  补充:可以通过event模块替换回调的读取文件方式。
     * 回调形式读取文件,获取匹配的value值
     * @param {*} info 
     * @param {*} callback 
     */
    function getExtName(info,callback){
    //mime.json 常用的各种请求json数据
        fs.readFile('./mime.json',(err,data)=>{
            if(err){
                console.log(err);
            }else{
                let mineObj=JSON.parse(data.toString());
                callback(mineObj[info]);
            }
        })
    }
    

    工具

    node自启动工具supervisor

    使用步骤:
    cnpm -g install supervisor
    supervisor app.js
    
    

    相关文章

      网友评论

          本文标题:Node基础备注

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