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)
网友评论