Node.js学习笔记(1、简介)
2014-01-29 14:27
211 查看
什么是Node.js
Node.js是JavaScript在服务器端的一个运行环境,也是一个工具库,用来与服务器端其他软件互动。(1)安装与更新
访问官方网站nodejs.org了解安装细节。安装完成以后,运行下面的命令,查看是否能正常运行。node --version更新node.js版本,可以使用下面的命令。
sudo npm install n -g sudo n stable(2)运行脚本程序
运行node.js程序,就是使用node命令读取JavaScript脚本。
node file.jsREPL环境
在命令行键入node命令,后面没有文件名,就进入一个Node.js的REPL环境(Read–eval–print loop,"读取-求值-输出"循环),可以直接运行各种JavaScript命令。node
> 1+1
2如果使用参数 --use_strict,则REPL将在严格模式下运行。
node --use_strict
这个REPL是Node.js与用户互动的shell,各种基本的shell功能都可以在里面使用,比如使用上下方向键遍历曾经使用过的命令。特殊变量下划线(_)表示上一个命令的返回结果。
> 1+1 2 > _+1 3
在REPL中,如果运行一个表达式,会直接在命令行返回结果,如果运行一条语句则不会,因为它没有返回值。
> x = 1 1 > var x = 1
上面代码的第二条命令,没有显示任何结果。因为这是一条语句,不是表达式,所以没有返回值。
异步操作
Node采用V8引擎处理JavaScript脚本,最大特点就是单线程运行,一次只能运行一个任务。这导致Node大量采用异步操作(asynchronous opertion),即任务不是马上执行,而是插在任务队列的尾部,等到前面的任务运行完后再执行。由于这种特性,某一个任务的后续操作,往往采用回调函数(callback)的形式进行定义。var isTrue = function(value, callback) {
if (value === true) {
callback(null, "Value was true.");
}
else {
callback(new Error("Value is not true!"));
}
}
上面代码就把进一步的处理,交给回调函数callback。约定俗成,callback的位置总是最后一个参数。值得注意的是,callback的格式也有约定。
var callback = function (error, value) { if (error) { return console.log(error); } console.log(value); }
callback的第一个参数是一个Error对象,第二个参数才是真正的数据。如果没有发生错误,第一个参数就传入null。这种写法有一个很大的好处,就是说只要判断回调函数的第一个参数,就知道有没有出错,如果不是null,就肯定出错了。
全局对象
Node提供以下一些全局对象,它们是所有模块都可以调用的。global:表示Node所在的全局环境,类似于浏览器中的window对象。
process:指向Node内置的process模块,允许开发者与当前进程互动。
console:指向Node内置的console模块,提供命令行环境中的标准输入、标准输出功能。
定时器函数:共有4个,分别是setTimeout(), clearTimeout(), setInterval(), clearInterval()。
require:用于加载模块。
_filename:指向当前运行的脚本文件名。
_dirname:指向当前运行的脚本所在的目录。
除此之外,还有一些对象实际上是模块内部的局部变量,指向的对象根据模块不同而不同,但是所有模块都适用,可以看作是伪全局变量,主要为module, module.exports, exports等。
模块化结构
Node.js采用模块化结构,按照CommonJS规范定义和使用模块。require方法用于指定加载模块。var http = require('http');
var express = require('express');
var routes = require('./app/routes');
上面代码分别用require方法加载了三个模块。如果require方法的参数只是一个模块名,不带有路径,则表示该模块为核心模块或全局模块。比如,上面代码中的http为node.js自带的核心模块,express为npm命令安装的全局模块。如果require方法的参数带有路径,则表示该模块为项目自带的本地模块,必须告诉require该模块的路径,比如上面代码的routes模块的位置在项目的app子目录下。
加载模块以后,就可以调用模块中定义的方法了。
核心模块
Node.js自带一系列的核心模块,下面就是其中的一部分:http:提供HTTP服务器功能。
url:解析URL。
fs:与文件系统交互。
querystring:解析URL的查询字符串。
child_process:新建子进程。
util:提供一系列实用小工具。
path:处理文件路径。
crypto:提供加密和解密功能,基本上是对OpenSSL的包装。
除了使用核心模块,还可以使用第三方模块,以及自定义模块。
自定义模块
Node.js模块采用CommonJS规范。只要符合这个规范,就可以自定义模块。下面是一个最简单的模块,假定新建一个foo.js文件,写入以下内容。// foo.js
module.exports = function(x) {
console.log(x);
};
上面代码就是一个模块,它通过module.exports变量,对外输出一个方法。这个模块的使用方法如下。
// index.js var m = require('./foo'); m("这是自定义模块");
上面代码通过require命令加载模块文件foo.js(后缀名省略),将模块的对外接口输出到变量m,然后调用m。这时,在命令行下运行index.js,屏幕上就会输出“这是自定义模块”。
node index # 这是自定义模块
module变量是整个模块文件的顶层变量,它的exports属性就是模块向外输出的接口。如果直接输出一个函数(就像上面的foo.js),那么调用模块就是调用一个函数。但是,模块也可以输出一个对象。下面对foo.js进行改写。
// foo.js var out = new Object(); function p(string) { console.log(string); } out.print = p; module.exports = out;
上面的代码表示模块输出out对象,该对象有一个print属性,指向一个函数。下面是这个模块的使用方法。
// index.js var m = require('./foo'); m.print("这是自定义模块");
上面代码表示,由于具体的方法定义在模块的print属性上,所以必须显式调用print属性。
相关文章推荐
- Node.js学习笔记(1) - Node.js简介
- node.js学习笔记(1)--Node.js简介及环境安装
- kshen转PowerDesigner UML 简介
- WAP 简介
- 现代软件构建系统的使用 CMake简介
- 自学WPF--第一课简介
- rtsp交互命令简介及过程参数描述
- DB2时间日期类型简介
- IOS NSInvocation用法简介-转
- Amazon SQS(Simple Queue Service) 简介
- tcpdump使用简介
- netty学习(一)--linux下的网络io模型简介
- BVT、EVT、DVT、PVT、MP等简介
- 【HEVC简介】DB-DeBlock Filter
- NoSQL 非关系型数据库简介
- Spark MLlib简介
- Spring Batch 之 Spring Batch 简介
- Internet 主机 IP地址 域名 统一资源定位符URL 域名服务器 DNS 万维网 WWW IP地址访问失败 IPV4 & IPV6 统一资源标识符 URI 统一资源名称 URN IP地址(简介
- ESMTP简介
- 使用StrutsTestCase对Action进行单元测试简介