卖萌的弱渣

I am stupid, I am hungry.

NodeJS: Introduction

1
2
3
4
// hello.js

console.log('Hello World');
console.log('%s: %d', 'Hello', 25);
1
2
3
4
5
6
7
8
9
// app.js

var http = require('http');
http.createServer(function(req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('<h1>Node.js</h1>');
  res.end('<p>Hello World</p>');
}).listen(3000);
console.log("HTTP server is listening at port 3000.");
1
2
3
4
5
6
7
8
9
10
11
12
// readfile.js
// 异步I/O

var fs = require('fs');
fs.readFile('file.txt', 'utf-8', function(err,data) {
  if(err)
      console.error(err);
  else
      console.error(data);
});

console.log('end.');
1
2
3
4
5
6
7
8
9
10
11
12
13
// readfilecallback.js
// 单独定义回调函数

function readFileCallBack(err, data) {
  if (err)
      console.error(err);
  else
      console.log(data);
}

var fs = require('fs');
fs.readFile('file.txt', 'utf-8', readFileCallBack);
console.log('end.');
1
2
3
4
5
6
7
// readfilesync.js
// 同步I/O

var fs = require('fs');
var data = fs.readFileSync('file.txt', 'utf-8');
console.log(data);
console.log('end.');
1
2
3
4
5
6
7
8
9
10
11
// event.js
// I/O 操作完成后会发送一个`事件`到事件队列。所有的事件由EventEmitter对象提供.
var EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();

event.on('some_event', function() {       // 注册一个事件some event
  console.log('some_event occured.');
});

setTimeout(function() {                  // timer 向event发送事件some_event
  event.emit('some_event');}, 1000);

Node.js 程序由事件循环开始,到事件循环结束,所有的逻辑都是事件的回调函数,所以 Node.js 始终在事件循环中,程序入口就是 事件循环第一个事件的回调函数。事件的回调函数在执行的过程中,可能会发出 I/O 请求或 直接发射(emit)事件,执行完毕后再返回事件循环,事件循环会检查事件队列中有没有未 处理的事件,直到程序结束。

Node.js 提供了 require 函数来调用其他模块 For example: var http = require('http').