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

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中的JavaScript)