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
');
}).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 初体验
http://www.cnblogs.com/Darren_code/archive/2011/10/31/2207063.html
新手如何快速入门node.js
http://www.9958.pw/post/nodejs_lesson
入门教程:
http://www.w3school.com.cn/js/
进阶
https://developer.mozilla.org/zh-CN/
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide
代码下载
http://www.byvoid.com/project/node
api文档
http://nodejs.org/api/
论坛
http://cnodejs.org/
安装包下载
http://nodejs.org/download/