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
变量返回,
- 变量