先从一个简单的demo提及,用cmd打开命令提示符,输入echo Hello,你们是否是看到终端上显示出了Hello字样,事实上这就是一个简单的事件。node
回到正题,相信提到node.js,免不了让人想起非阻塞、回调、事件循环、并发、网络编程等。(在此强调一下并发:许多人同时尝试作一样的事情),下面将主要介绍一下node.js的特点功能!web
相信你们到回调应该不陌生,简单一点的说就是函数能够做为参数传递给另一个函数中,而后被调用。咱们来看看node.js是如何使用回调的,用例子说话!(哈哈)express
var fs = require('fs'); fs.readFile('somefile.txt', 'utf8', function (err, data) { if (err) { throw err; } console.log(data); });
回调函数中的第一个参数err,用于保存在读取文件时返回的错误。npm
回调函数中的第一个参数err,用于保存读取文件所返回的数据。编程
Node.js以提供一个建立联网应用程序的平台为目标,回调是Node.js实现网络编程的关键方法,由于回调让代码在其事件发生的时候才能运行。基于网络的I/O是不可预测的,事件驱动编程是处理不可预测性的极佳方式,回调产生是负责解决不可预测性的方法,它也是处理并发的高效方法。浏览器
一、创建一个app.js,代码以下服务器
var http = require('http'), urls = ['shapeshed.com', 'www.bbc.co.uk', 'edition.cnn.com']; function fetchPage(url) { var start = new Date(); http.get({ host: url }, function (res) { console.log('Got response from:' + url); console.log('Request took:' + (new Date() - start) + 'ms'); }); } for (var i = 0; i < urls.length; i++) { fetchPage(urls[i]); }
二、运行 node.app 多执行几回 仔细看结果 从这个例子中我相信你应该可以体会基于网络的I/O是不可预测的,事件驱动编程是处理不可预测性的极佳方式,回调产生是负责解决不可预测性的方法,它也是处理并发的高效方法。网络
Node.js运行在单一的进程中而且要求开发人员使用异步编码风格。(同步和异步的概念在此不赘述了)并发
网络常常不是开发人员所能控制的,咱们可能要从不属于咱们的远程服务器获取代码并处理,经过使用异步风格可让脚本在网络事件返回时响应。app
事件循环使得系统能够将回调函数先保存起来,然后当事件在未来发生时再运行。
事件循环的关键思想是将代码围绕着事件来构架而不是按照期待中的输入顺序来构架,因为事件循环以单一进程为基础,因此为了确保高性能,须要遵循如下一些规则:
网络编程免不了要了解一下HTTP,事实上它定义了服务器与客户端在通讯时应该如何发送和接收数据。经过使用HTTP模块的低级应用程序编程接口,Node.js既容许咱们建立服务器也容许咱们建立客户端。
讲到http,你们天然而然的会想到URL。看一段代码。
var http = require('http'), url = require('url'); http.createServer(function (request, response) { var pathname = url.parse(request.url).pathname; if (pathname === '/') { response.writeHead(200, { 'Content-Type': 'text/plain' }); response.end('Home Page ! '); } else { if (pathname === '/about') { response.writeHead(200, { 'Content-Type': 'text/plain' }); response.end('About Us ! '); } else { if (pathname === '/redirect') { response.writeHead(301, { 'Location': '/' }); response.end(); } else { response.writeHead(404, { 'Content-Type': 'text/plain' }); response.end('Page not found ! '); } } } }).listen(3000, '127.0.0.1'); console.log(' change!');
运行以后,打开浏览器访问http://127.0.0.1:3000
http://127.0.0.1:3000/about
http://127.0.0.1:3000/redirect
http://127.0.0.1:3000/hello
看到的结果各不同,这就是路由起的效果。
在你们眼里,彷佛HTML客户端就是浏览器,事实上HTML客户端能够是任何对服务器请求响应的东西。
看了上面的代码可能你们会很困惑,我用Node.js须要了解那么多HTTP里面的细节,会不会太麻烦了,下面Express粉墨登场了。
简单一点的一句话介绍Express就是Node.js的一个Web框架。
使用npm install -g express命令来安装Express(友情提示:这里使用了-g是由于咱们是用的全局安装)
一、打开终端,输入express [siteName](注意这里的siteName是你自定义的网站名称)
二、cd siteName && npm install
三、node app
四、打开web浏览器,输入http://127.0.0.1:3000/