1.简介
node是javascript的服务器运行环境,这里面的运行环境需要从两个方面进行理解
- javascript是在Node上运行的,这有类似于虚拟机的意思
- Node提供了大量的工具(功能模块化),javascript因此拥有了读写文件,新建子进程….的功能
2.REPL环境
在命令行中输入node,即进入到node的repl环境中,在这里可以执行各种javascript的命令,类似
> x = 1> var x = 1
d 的命令,自己动手去试试表达式的结果和语句的结果吧…
3.异步操作
众所周知,javascript是采用单线程的方式执行的,为了避免单线程带来的堵塞和延迟那一大堆的问题,node是不得不采用异步的操作,这里的异步操作便是采用回调的方法。
这里我们来对异步操作做一些简单的约束:
- 如果某个回调函数作为函数的操作,那么该回调函数必然是函数的最后一个参数,例如
var isTrue = function(value, callback) {
if (value === true) {
callback(null, "Value was true.");
}
else {
callback(new Error("Value is not true!"));
}
} - 上述的回调函数本身的第一个参数必须是上一步传入的错误对象,例如
var callback = function (error, value) {
if (error) {
return console.log(error);
}
console.log(value);
}
4.全局对象和全局变量
全局对象(其他模块都可以调用)
1.global:node所在的全局环境
2.process : node所处的当前进程
3.console :指向的是内部的console模块,提供命令行里面的输出功能全局变量
1.__filename:指向当前运行的脚本文件名。
2.__dirname:指向当前运行的脚本所在的目录。
5.模块化结构
我所理解的模块即是一个个的功能包,当我们用require加载模块进来的时候,其实就是给本程序加上一些功能板块同时利用其中的各种各样的功能
有那么一些功能模块是node自带的,不需要下载便能直接拿来用的,例如下面这些
- http:提供HTTP服务器功能
- url:解析URL。
- fs:与文件系统交互
- querystring:解析URL的查询字符串
- child_process:新建子进程。
- util:提供一系列实用小工具。
- path:处理文件路径。
- crypto:提供加密和解密功能,基本上是对OpenSSL的包装
6.0自定义模块
新建一个文件foo.js,写入一下代码module.exports = function(x) {
console.log(x);
};
上述是利用Module.exprots的功能向外输出这个方法。接下来在另一个文件index.js里面,我们试着来利用这个模块var m = require('./foo');
这个时候
m("这是自定义模块");m = function(x){
console.log(x)
}
异常处理
前面讲到,jacascript是单线程的,一旦某一句出现异常,将会引起整个进程的崩溃.所以异常的处理尤为重要,处理异常的方式有以下几点:
- 使用throw语句抛出一个错误对象,即抛出异常
- 将错误对象传递给回调函数,由回调函数负责发出错误
- 通过EventEmitter接口,发出一个error事件
下面将是一些代码操作来学习上述的二种异常处理方法(try/catch语句在实际应用中不太理想,这里不做赘述)
1. 最常用的回调函数处理方式
fs.readFile('/foo.txt',function(err,data){
if(err!==null) throw err;
console.log(data);
})
是不是很简明扼要?简单的我都不想再分析这个代码了…
2.EventEmitter接口的error事件
讲道理,写到这,我对EventEmitter的概念都是模棱两可,所以凑合着看吧…
var EventEmitter = require('events').EventEmitter //引入events模块,调用模块内的EventEmitter
var emitter= new EventEmitter() //构造一个EventEmitter的实例
emitter.emit('error',new Error('something bad happened')) //利用第一个参数的error事件,来抛出异常
写到这貌似就完成了异常抛出的工作了,其实不然,务必对error做出监听。监听的代码如下’emitter.on(‘error’,function(err){
console.error(‘出错:’+err.message)
})’