node的优势:
- 非阻塞
- 单线程
- 事件驱动
http - 模块
hello world
a. 全局方法require()是用来导入模块的,一般直接把 require() 方法的返回值赋值给一个变量,在 JavaScript 代码中直接使用此变量即可 。require(“http”) 就是加载系统预置的 http 模块
b. http.createServer 是模块的方法,目的就是创建并返回一个新的web server对象,并且给服务绑定一个回调,用以处理请求。
c. 通过 http.listen() 方法就可以让该 HTTP 服务器在特定端口监听。
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/');
模块加载
模块名称以 “./“开始的,比如 require(“./myModule.js”)用来加载与当前JavaScript同一目录下的myModule.js 模块。
myModule.js
console.log(‘hello jiahao!’);
var name = ’jiahao’; // 私有熟悉
this.location = ‘hangZhou’; // 共有属性
this.showLog = function(){ // 共有方法
console.log(‘hi,jiaHao!’);
}
myTest.js
var myModule = require(‘./myModule.js’);
myModule.showLog(); // hi,jiahao
myModule.name; // undefiend
myModule.location // hangZhou
私有方法我们在模块以外是取不到的,所以是undefined。共有属性和共有方法的声明需要在前面加上 this 关键字。
fs 模块(文件模块)
fs模块所有的方法都提供了异步和同步两种
api | 说明 |
---|---|
readFile | 异步读取文件,后面的function是回调函数 |
var fs = require('fs');
fs.readFile('./myModule.js', function (err, data) {
if (err) throw err;
console.log('successfully');
});
console.log('async');
events 模块
node 采用的是事件驱动的模式,其中的很多模块都会产生各种不同的事件,可由模块来添加事件处理方法,所有能够产生事件的对象都是事件模块中的 EventEmitter 类的实例.
a. 使用require()方法添加了events模块并把返回值赋给了一个变量
b. new events.EventEmitter()这句创建了一个事件触发器,也就是所谓的事件模块中的 EventEmitter 类的实例
c. on(event, listener)用来为某个事件 event 添加事件处理方法监听器
d. emit(event, [arg1], [arg2], […]) 方法用来产生事件。以提供的参数作为监听器函数的参数,顺序执行监听器列表中的每个监听器函数。
var events = require("events");
var emitter = new events.EventEmitter();
emitter.on("myEvent", function(msg) {
console.log(msg);
});
emitter.emit("myEvent", "Hello World.");
EventEmitter 类中的方法都与事件的产生和处理相关:
-
addListener(event, listener) 和 on(event, listener) 这两个方法都是将一个监听器添加到指定事件的监听器数组的末尾
-
once(event, listener) 这个方法为事件为添加一次性的监听器。该监听器在事件第一次触发时执行,过后将被移除
-
removeListener(event, listener) 该方法用来将监听器从指定事件的监听器数组中移除出去
-
emit(event, [arg1], [arg2], […]) 刚刚提到过了。
node & express & jade 入门
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('hello world');
console.log('hello world');
});
app.listen('8808');
require() | 用于在当前模块中加载和使用其他模块;此方法是模块的基础,使用中大概有路径的概念就行。PS:JS文件可以去掉”.js”后缀. |
exports | 表示模块的导出对象,用于导出模块的属性和公共方法 |
app.listen() | app.listen() 就是在给定的主机和端口上监听请求,这个和node中http模块的http.createServer(function(){…}).listen()效果一致; |