zoukankan      html  css  js  c++  java
  • node学习笔记(一)本地文件目录查看器

    Node.js

    img

    新闻

    nw.js 前端开发桌面应用

    内容

    node.js实战 照例提供百度云链接,本来以为是实战系列的那本,但不是,不过这本也不错

    链接:https://pan.baidu.com/s/1HC2Vhv2EwnYJs0htDTpQTg
    提取码:wws9

    菜鸟教程至事件循环

    随手笔记

    img

    Node核心技术

    告诉Node去做某件事情,并且完成后告诉node传送给谁

    第一个应用

    var http = require('http');
    
    http.createServer(function (request, response) {
    
        // 发送 HTTP 头部 
        // HTTP 状态值: 200 : OK
        // 内容类型: text/plain 还有application/json这个
        response.writeHead(200, {'Content-Type': 'text/plain'});
    
        // 发送响应数据 "Hello World"
        response.end('Hello World
    ');
    }).listen(8888);
    
    // 终端打印如下信息
    console.log('Server running at http://127.0.0.1:8888/');
    

    类的定义

    function shape() {
        this.x=0;
        this.y=0;
        this.move=function (x,y) {
            this.x=x;
            this.y=y;
        }
        this.distance=function () {
            return Math.sqrt(this.x*this.x+this.y*this.y);
        }
    }
    var s=new shape();
    s.move(10,10);
    console.log(s.distance());
    

    使用原型添加类的对象

    function shape() {}
    shape.prototype.x=0;
    shape.prototype.y=0;
    shape.prototype.move=function (x,y) {
        this.x=x;
        this.y=y;
    }
    shape.prototype.distance=function () {
        return Math.sqrt(this.x*this.x+this.y*this.y);
    }
    var s=new shape();
    s.move(10,10);
    console.log(s.distance());
    
    

    console

    warn 打印标准错误
    time 标准时间戳
    timeEnd time之后又过了多长时间
    assert 又抛出了异常

    //延时
    console.log('start');
    setTimeout(function () {
        console.log('i have done my work');
    },2000)//2000就是两秒
    //异步读文件
    var fs=require('fs');
    fs.open(
        'gou.txt','r',
        function (err,handle) {
            if(err){
                console.log("Error"+err.code+"("+err.message+")");
                return;//注意报了错之后要返回
            }
            var buf=new Buffer(100000);
            fs.read(
                handle,buf,0,100000,null,
                function(err,length){
                    if(err){
                        console.log("Error"+err.code+"("+err.message+")");
                        return ;
                    }
                    console.log(buf.toString('utf-8',0,length));
                    fs.close(handle,function(){})
                }
            )
        }
    )
    //输完所有的参数后,要有一个function(err,什么参数),if(err)怎么样,之后再有一个处理
    var fs=require('fs');
    function FileObject() {
        this.filename="";
        this.file_exists=function (callback) {
            var me=this;//异步回调插入事件队列后,执行完返回不再有FileObject的继承关系了,要有重新的this指针,用一个变量代替this,可以使this保留下来
            console.log('try to open',me.filename);
            fs.open(this.filename,'r',function (err,handle) {
                if(err){
                    console.log(err.stack);
                }
                fs.close(handle,function () {
    
                });
                callback(null,true);
            });
    
        }
    };
    var fo=new FileObject();
    fo.filename='ou.txt';
    fo.file_exists(function (err,results) {
       if(err)
       {
           console.log('oh! xiba!'+err.stack);
       }
       console.log('file exits!');
    });
    
    

    err

    值为null,表示操作成功,并且会有一个返回值
    值为一个Error对象的实例,偶尔会看到不一致的地方
    callback(null,a)//没有错误,把a的值送回去

    回调函数

    大多数回调函数在所有项加载完后就调用这个函数,该回调函数拥有回调都有的原型,一个err参数和result参数

    process.nextTick

    我放弃主动权,你可以在你空闲的时候执行我给你提供的函数,每隔一段时间就处理一次其他任务

    打造服务器

    var http=require('http');
    function f(req,res) {
        de(req.method);
        res.writeHead(200,{"Content-Type":"application/app"});
        res.end(JSON.stringify({error:null})+'
    ');//选中后会下载一个文件
    }
    var s=http.createServer(f);//把处理函数作为参数传进去
    s.listen(8080);
    //一个查看本地照片目录的应用
    var http=require('http');
    var fs=require('fs');
    function f(callback) {
        fs.readdir(
            "img",
            function (err,files) {
                if(err){
                    callback(err);//第一个参数喂err,第二个参数不用你管了
                    return ;
                }
                callback(null,files);//没有错误,带回文件
            }
        );
    }
    function g(req,res) {
        de(req.method);
        f(function (err,albums) {
            if(err){
                res.writeHead(503,{'Content-Type':'application/json'});//就相当于错误404
                res.end(JSON.stringify(err)+'
    ');
            }
            var out={
                error:null,
                data:{albums:albums}
            };
            res.writeHead(200,{"Content-Type":"application/json"});
            res.end(JSON.stringify(out)+'
    ');//把输出json化,别忘了带一个回车
        });
    }
    var s=http.createServer(g);
    s.listen(8080);
    //{"error":null,"data":{"albums":["1.jpg","2.jpg","3.jpg","4.jpg","5.jpg"]}}
    

    事件循环

    //readFileSync是同步的,后面不能加回调函数,去掉Sync即可回调
    //应该先on好处理器,再emit信号
    // 引入 events 模块
    var events = require('events');
    // 创建 eventEmitter 对象
    var eventEmitter = new events.EventEmitter();
    
    // 创建事件处理程序
    var connectHandler = function connected() {
       console.log('连接成功。');
      
       // 触发 data_received 事件 
       eventEmitter.emit('data_received');
    }
    
    // 绑定 connection 事件处理程序
    eventEmitter.on('connection', connectHandler);
     
    // 使用匿名函数绑定 data_received 事件
    eventEmitter.on('data_received', function(){
       console.log('数据接收成功。');
    });
    
    // 触发 connection 事件 
    eventEmitter.emit('connection');
    
    console.log("程序执行完毕。");
    
  • 相关阅读:
    centos7下查看端口是否被占用
    centos7通过yum安装redis
    centos7下mysql远程连接
    centos7通过yum安装JDK1.8
    Jwt系列2:使用
    Jwt系列1:简介
    Python基础语法
    排序
    利用MultipartFile来进行文件上传
    服务器端跳转和客户端跳转
  • 原文地址:https://www.cnblogs.com/Tony100K/p/11608466.html
Copyright © 2011-2022 走看看