Node.js是一个基于Chrome V8 引擎的javascript运行时环境.
Node.js 使用了一个事件驱动,非阻塞式I/O的模型,使其轻量又高效.
Node.js的包管理器npm,是全球最大的开源库生态系统.
-
引入http模块
var http = require('http')
-
创建服务器
var http = require('http') http.createServer(function(request,response){ response.writeHead(200,{'Content-Type':'text/plain'}) response.end('Hello World\n') }).listen(8888)
使用node命令执行
node server.js
打开浏览器访问
npm -v //查看版本
npm install npm -g //自更新
npm install cnpm -g //安装国内淘宝镜像(以后cnpm代替npm使用即可)
npm install express
- R read
- E execute
- P print
- L looper
Node.js的 异步编程的直接体现就是回调
var fs = require('fs')
//同步执行
var data = fs.readFileSync('a.txt')
console.log(data)
var fs = require('fs')
fs.readFile('a.txt',function(err,data){
//异步执行
if(err){
return
}
console.log(data)
})
-
Node.js是单进程单线程应用程序,但是因为V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高
-
Node.js 几乎每个API都是支持回调函数的
-
Node.js基本上所有的事件机制都是用设计模式中的观察者模式实现
-
Node.js单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数
Node.js有多个内置的事件,通过引入events模块,并通过实例化EventEmitter类来绑定和监听事件
//引入events模块
var events = require('events')
//创建eventEmitter对象
var eventEmitter = new events.EventEmitter()
//绑定事件及监听
eventEmitter.on('eventName',eventHandler)
//触发事件
eventEmitter.emit('eventName')
实例
var events = require('events')
var eventEmitter = new events.EventEmitter()
var connectHandler = function connected(){
console.log('连接成功')
eventEmitter.emit('data_received')
}
eventEmitter.on('connection',connectHandler)
eventEmitter.on('data_received',function(){
console.log('数据接收成功')
})
eventEmitter.emit('connection')
console.log('执行完毕')
main.js文件
var hello = require('./hello')
hello.world()
hello.js文件
exports.world = function(){
console.log('Hello world')
}
exports实际上就是module.exports的相同引用
与javascript函数相同
router.js
function route(pathname){
console.log('About to route a request for ' + pathname)
}
exports.route = route
server.js
var http = require('http')
var url = require('url')
function start(route){
function onRequest(request,response){
var pathname = url.parse(request.url).pathname
console.log('request for ' + pathname + ' received.')
route(pathname)
response.writeHead(200,{'Content-Type':'text/plain'})
response.write('Hello World')
response.end()
}
http.createServer(onRequest).listen(8888)
console.log('Server has started')
}
exports.start = start;
index.js
var server = require('./server')
var router = require('./router')
server.start(router.route)