1.下载:VirtualBox,装好ubuntu

2.安装:(在终端一步步运行以下命令)

sudo apt-get install g++ curl libssl-dev apache2-utils   

sudo apt-get install git-core   

git clone git://github.com/joyent/node.git     

cd node  

./configure  

make     

sudo make install

3.helloworld

方法1:新建一件文件 helloworld.js,输入console.log('hello world'),打开终端(ctrl+alt+t),进入helloworld.js所在目录,执行一下命名 helloworld.js,如果执行成功你会看到终端输出 hello world.

方法2:node -e "console.log('hello world')",可以把要执行的语句作为 node -e 的参数直接执行

4.REPL模式

运行无参的node将会进入REPL模式,会出现一个“>”,如果你执行函数,将会放回函数的返回值,如果你输入错误的指令,会提示错误打印堆栈,连续二次ctlr+c退出REPL模式.

5.建立http服务器

创建app.js文件,输入

  var http = require('http');

  http.createServer(function (req, res) {

    res.writeHead(200, {'Content-Type': 'text/plain'});

   res.end('Hello World\n');

  }).listen(1337, "127.0.0.1");

  console.log('Server running at http://127.0.0.1:1337/'​ );

运行app.js

打开浏览器访问:http://127.0.0.1:1337/

你会看到hello world.

代码逻辑:

a. 全局方法require()是用来导入模块的,一般直接把 require() 方法的返回值赋值给一个变量,在 JavaScript 代码中直接使用此变量即可 。require("http") 就是加载系统预置的 http 模块

b. http.createServer 是模块的方法,目的就是创建并返回一个新的web server对象,并且给服务绑定一个回调,用以处理请求。

c. 通过 http.listen() 方法就可以让该 HTTP 服务器在特定端口监听。

d. console.log就不用多说了,了解firebug的都应该知道,Node实现了这个方法。

6.安装调试插件

现在的node每次修改要重启才会生效,安装个插件会自动重启.

除Node本身提供的API外,现在有不少第三方模块可极大的提高开发效率,npm就是Node的软件包管理器,可以用它安装所需软件包并发布自己为nodejs写的软件包。官网地址:npmjs.org

安装只需要在终端写入一行代码:    

curl http://npmjs.org/install.sh | sh  npm安装node扩展包同样是一行代码:  

npm install <包名>    //例:sudo npm install -g supervisor (npm install express)  

注:如果安装模块的过程中报域名错误的话,请清空缓存 >npm cache clean 或重启计算机即可。

7.读取一个文件

  var fs = require('fs');

  fs.readFile('helloworld.js','tuf-8',function (err, data)) {

    if (err) throw err;

    console.log('successfully');

  console.log(data);

  });

  console.log('async');

所谓的异步,大家应该都能想得到运行时会先打先显示"async",再显示"successfully".

可以把回调函数拿出来,运行结果是一样的

 function readFileCallBack(err,data)

 {

   if (err)

  {

    console.error(err)

   throw err;

  }

  else

  {

    console.log('successfully');

   console.log(data); 

  }

 }

  var fs = require('fs');

  fs.readFile('helloworld.js','tuf-8',readFileCallBack);

 console.log('async');

同步读取一个文件

  var fs = require('fs');

  data = fs.readFileSync('helloworld.js','tuf-8');

  console.log('successfully');

 console.log(data);

8.理解Node的模块概念

在Node中,不同的功能组件被划分成不同的模块。应用可以根据自己的需要来选择使用合适的模块。每个模块都会暴露一些公共的方法或属性。模块的使用者直接使用这些方法或属性即可,对于内部的实现细节就可以不用了解。除了Node本身提供的API外,开发人员也可以利用这个机制来将应用拆分成多个模块,以提高代码的可复用性。

1.如何使用模块?

在Node中使用模块是非常方便的,在 JavaScript 代码中可以直接使用全局函数 require() 来加载一个模块。

在刚刚”Hello World"的例子中,require("http") 可以加载系统预置的 http 模块;模块名称以 "./" 开始的,如 require("./myModule.js") 用来加载与当前 JavaScript 文件同一目录下的 myModule.js 模块。

2.自己如何开发模块?

刚刚介绍使用require()导入模块的时候,模块名称以 "./" 开始的这种,就是自己开发的模块文件。需要注意的就是JS文件的系统路径。

代码中封装了模块的内部处理逻辑,一个模块一般都会暴露一些公开的方法或属性给其他的人使用。模块的内部代码需要把这些方法或属性给暴露出来。

3.来一套简单的例子。先创建一个模块文件如myModule.js,就一行代码

console.log('Hi Darren.')  然后创建一个test.js文件,导入这个JS文件,

来一个深点的例子,myModule.js,代码如下:

------------------------------------

var name = "Darren";  

this.location = "Beijing";  

this.showLog = function()

{     

 console.log('Hi Darren.')  

};

-----------------------------------

test.js 代码

-------------------------------------

var myMymoudle = require("./myModule.js");

myMymoudle.showLog();

console.log(myMymoudle.name);

console.log(myMymoudle.location);

-------------------------------------

结果高亮的地方很清楚的告诉我们,私有方法我们在模块以外是取不到的,所以是undefined。共有属性和共有方法的声明需要在前面加上 this 关键字。

Node事件

EventEmitter 类中的方法都与事件的产生和处理相关:

1. addListener(event, listener) 和 on(event, listener) 这两个方法都是将一个监听器添加到指定事件的监听器数组的末尾

2. once(event, listener) 这个方法为事件为添加一次性的监听器。该监听器在事件第一次触发时执行,过后将被移除

3. removeListener(event, listener) 该方法用来将监听器从指定事件的监听器数组中移除出去

4. emit(event, [arg1], [arg2], [...]) 刚刚提到过了。

var events = require("events");
var emitter = new events.EventEmitter();
emitter.on("myEvent", function(msg)
{
console.log(msg);
});
setTimeout(function()
{
emitter.emit("myEvent", "Hello World.");
},1000)


简单的分析这段:(一秒后向控制台输出hello world)

1. 使用require()方法添加了events模块并把返回值赋给了一个变量

2. new events.EventEmitter()这句创建了一个事件触发器,也就是所谓的事件模块中的 EventEmitter 类的实例

3. on(event, listener)用来为某个事件 event 添加事件处理方法监听器

4. emit(event, [arg1], [arg2], [...]) 方法用来产生事件。以提供的参数作为监听器函数的参数,顺序执行监听器列表中的每个监听器函数。

node.js_git