三、模块
如果你熟悉Java语言的包Package概念,那么你会理解Node.js的模块这个概念,两者没什么不同。模块是简单的JavaScript文件,它包含了特定目的的代码。模块模式(Module Pattern)用于简化代码的组织和导航。要使用模块的属性,你必须在JavaScript中require导入它,与Java语言中的import导入相同。
Node.js中有两者类型的模块:
1、核心模块(Core Module)
核心模块包含了预编译到Node.js的库。核心模块的模板是向开发者提供经常出现和重复的代码片段,如果没有这些,那么开发者会陷入这些大量重复且冗长无趣的工作中。常见的核心模块包括:HTTP模块、URL模块、EVENTS模块、文件系统模块等。
2、用户定义的模块(User Defined Module)
用户定义的模块是开发者为了特定功能自己实现的模块。通常是核心模块不能满足所需的功能时开发的。用户定义的模块同样需要require导入。如果是核心模块,require导入只需传入模块名,而对于用户定义的模块,require导入还需要传入文件系统的路径。
比如:
// 导入核心模块
var http = require('http);
// 导入用户定义的模块
var something = require('./folder1/folder2/folder3/something.js');
四、回调
在JavaScript语言中,函数被认为是第一级的对象。这意味着开发者可以把函数当作是常规对象那样,做所有的操作。可以把函数赋值给一个变量,还可以把函数作为参数传递给方法,还可以把函数作为对象的属性,甚至可以从函数返回函数。
回调是JavaScript语言中的一种匿名函数,它可以作为参数传递给另一个函数,还可以在随后的函数执行中执行回调函数或返回回调函数。这是回调函数广泛使用的编程范式。
把回调函数作为参数传递给另一个函数时,我们只需传递函数定义,也即,我们无需知道回调函数什么时候得以执行。这完全取决于调用函数的机制,故以回调命名。回调函数是Node.js的非阻塞通信和异步处理的基础。
setTimeout(function() {
console.log("world");
}, 2000)
console.log("hello");
这是最简单的回调函数的例子之一,我们把匿名函数当作参数传递给setTimeout函数,而匿名函数仅仅是在控制台输出日志“world”。由于这只是函数定义,我们并不知道它什么时候得以执行,执行取决于setTimeout函数的2000毫秒后输出。
故第二个日志语句先在控制台输出“hello”,然后等两秒后再输出回调函数定义的日志“world”。
// output
hello
world
理解以上四个概念有助于深入Node.js。
下面关于Node.js的内容你可能也喜欢:
在 Ubuntu 14.04/15.04 上安装配置 Node.js v4.0.0
如何在CentOS 7安装Node.js