美文网首页
读<了不起的Node.js>-05.node中的JavaScri

读<了不起的Node.js>-05.node中的JavaScri

作者: 在路上的海贼 | 来源:发表于2018-08-04 16:41 被阅读0次

    node中的JavaScript

    • 在nodejs中写js和在浏览器中不同,node除了提供和浏览器一样的基本语言外,还在语言基础上提供了构建强大网络应用所需的API

    global对象

    • 在浏览器中,全局对象指的就是window对象,在window对象上定义的任何内容都可以被全局访问到,比如,setTimeout其实就是window.setTimeout,document其实就是window.document
    • 在node中有两个类似但是给子代表着和不同含义的对象,
    • global: 和window一样,任何global对象上的属性都可以被全局访问到

    • process:所有全局执行上下稳重的内容都在process对象中,在浏览器中,只有一个window对象,在node中,也只有一个process对象,举例来说,在浏览器中窗口的名字是 window.name ,类似的 在node 中 进程的名字是 process.title

    实用的全局对象

    • 浏览器中有一些函数和工具并非是语言标准被的一部分,但浏览器却仍将其视作重要的特性来实现,例如setTimeout,事实上该函数是无法通过纯js重写
    • 在node中为了提高小路就加进来了,setImmediate API就是一个例子,在node中它的作用和process.nextTick相当
    console.log(1);
    process.nextTick(function () {
        console.log(3);
    });
    console.log(2);
    setTimeout(function () {
        console.log(4);
    }, 1000);
    
    • 把它想象成setTimeout(fn,1) 或者"通过异步的方式在最近的将来调用函数",
    • 还有一个例子是console,console 最早由firefox中辅助开发的插件 firebug实现,现在node也引入了一个console对象,该对象用来输出打印
    • console.log和 console.errot

    模块系统

    • node内置了很多模块 例如 http ,net,fs
    • 引入了一些核心模块 require module exports

    绝对和相对模块

    • 这里绝对模块指的是node通过其内部的 node_modules 或者node内置的如fs
    • 相对模块指的是require调用的指向相对工作目录中得 JavaScript文件

    暴露API

    • 相对模块得通过modules exprots导出文件接口 主文件那边用require来调用

    事件

    • nodejs的基础api之一就是EventEmitter 无论在node还是浏览器中,大量代码都依赖于所监听或者分发的事件
    • window.addEventListerner('load',function () { alert('试试');};
    • 浏览器中负责处理事件相关的DOM API主要包括addeventlistener,removeeventlistener以及dispatchevent
    • 下面发起一个ajax 浏览器中
    var ajax = new XMLHttpRequest;
    ajax.addEventListener('stateChange', function () {
        if (ajax.readyState == 4 && ajax.responseText) {
            alert('获取一些数据' + ajax.responseText);
        }
    });
    
    ajax.open('GET', '/my-page');
    ajax.send(null);
    
    
    • 用node发起一个异步请求,一个回调函数
    let http = require('http');
    
    http.Server(function (req, res) {
        let buf = "";
        req.on('data', function (data) {
            buf += data;
        });
        req.on('end', function () {
            console.log("数据接收完毕");
        });
    }).listen(3000);
    
    
    • 这是node中常见的例子: 将请求数据内容进行缓冲(data事件),等到所有的数据都接收完毕(end事件)再对事件进行处理
    • 不论某个事件在将来被触发了多少次,我都希望只调用一次回调函数,这类需求提供了一个名字简洁的方式
    a.once('某个事件',function(){
        //无论触发多少次 该方法只执行一次
    })
    
    • API手册很重要 学的时候记得多看

    buffer

    • 除了模块以外 node还弥补了语言另外一个不足之处,对于二进制数据的处理
    • buffer是一个表示固定内存分配的全局对象(也就是说,要放到缓冲区中得字节数需要提前定下),他就好比一个由八位字节元素组成的数组,可以有效的在JavaScript中表示二进制数据
    • 该功能可以对数据进行编码转换,例如可以创建一副用base64表示的图片,然后将其作为二进制png形式写入文件
    let mybuffer = new Buffer('==ii1j2i3h1i23h','base64');
    console.log(mybuffer);
    require('fs').writeFile('log.opng',mybuffer)
    

    相关文章

      网友评论

          本文标题:读<了不起的Node.js>-05.node中的JavaScri

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