Node.js入门
[TOC]
简介
 简单来说,Node.js 就是运行在服务端的 JavaScript。是一个基于Chrome JavaScript 运行时建立的一个平台,是一个事件驱动I/O服务端JavaScript环境。
创建第一个服务器应用
 一般而言,创建一个node.js应用需要以下步骤:
- 引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。 1var http=require("http");
- 创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。 1234http.createServer(function (request,response){response.writeHead(200,{'content-type':'text/plain'});response.end("hello world\n");}).listen(8888);
- 接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。 - 在命令行中运行js文件。 1node server.js- 然后就相当于启动了一个web服务器,直接在浏览器中即可访问到接口。 -  
模块的基本概念
 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Node环境中,一个.js文件就称之为一个模块(module)。
| 
 | 
 | 
在其他js文件中通过以下办法引用模块
| 
 | 
 | 
node查找模块的顺序依次为:内置模块、全局模块和当前模块;
了解模块的原理
- 这种模块加载机制被称为CommonJS规范。在这个规范下,每个 - .js文件都是一个模块,它们内部各自使用的变量名和函数名都互不冲突。那么node是如何做到命名不冲突的呢?这里就需要使用到js的特性了。这里的 node将我们编写的js文件通过函数包裹起来,将其声明的全局变量都变成了局部变量。从未防止了命名冲突的问题。12345678910111213//原本代码var s = 'Hello';var name = 'world';console.log(s + ' ' + name + '!');//包装后的代码(function () {// 读取的hello.js代码:var s = 'Hello';var name = 'world';console.log(s + ' ' + name + '!');// hello.js代码结束})();- 通过这种方法从而实现了模块的隔离。 
- node是如何将模块暴露给其他js文件呢 123456789101112131415161718// 准备module对象:var module = {id: 'hello',exports: {}};var load = function (module) {// 读取的hello.js代码:function greet(name) {console.log('Hello, ' + name + '!');}module.exports = greet;// hello.js代码结束return module.exports;};var exported = load(module);// 保存module:save(module, exported);- 变量module是Node在加载js文件前准备的一个变量,并将其传入加载函数,我们在hello.js中可以直接使用变量module原因就在于它实际上是函数的一个参数:
- 通过把参数module传递给load()函数,hello.js就顺利地把一个变量传递给了Node执行环境,Node会把module变量保存到某个地方。
- 由于Node保存了所有导入的module,当我们用require()获取module时,Node找到对应的module,把这个module的exports变量返回,
 -  
- 变量