什么是nodejs呢?
说的白话点:Node.js就是一个Javascript运行环境(runtime)。实际上它是对Google V8引擎进行了封装(什么是V8引擎?JavaScript 引擎的基本工作是把开发人员写的 JavaScript 代码转换成高效、优化的代码,这样就可以通过浏览器进行解释甚至嵌入到应用中)。
优点我这里就不再赘述了,等后边我们边学习边总结吧
学习nodejs首先我们得下载,我的环境是windows做的实验,所以下载的是window版本的,建议大家下载相对较高的版本,因为相对较高的版本已经内嵌了npm,大家有疑问了?啥叫npm?npm(node package maneger)就是一个管理工具,用来管理node封装模块(Node package module),注意了:因为nodejs只是一个运行环境,我们要应用web服务器,连接mongodb数据库的时候都需要有专门的nodejs包,类似于java中的util等工具包,我们常用的有express/mongoose/http等等。每个node封装模块包括一个定义包的package.json文件,该package.json文件包含元数据信息,如名称、版本等。对于这些封装模块,在node环境下,我们在使用这些封装模块时候,需要安装,安装常用命令为:npm install(该命令将安装package.json里所列举的封装模块)/npm install express/npm install express@2.0.0(这种是为待安装的模块包指定版本号,这个例子指定express的版本为2.0.0)
使用package.json
package.json定义了一个模块,包括其依赖的的JSON文件,举例:
{
'name':'my_module',
'version':'0.1.0',
'descrition':'whatever'
'despendencies':{
'express':'2.x.x',
'connect':'latest'
}
}
我们只需在工程下面添加该文件,并npm install 即可安装该json中所列举的despendencies了解nodeJs事件模型:
传统的web服务器编程是这样的,来一个请求我给分配一个线程,然后这个线程完成所有的事情后直到请求完成并发出相应,比如我现在有个请求,这
GetFile,服务器将为其分配一个线程,然后所有的打开文件,读取文件,发送文件内容都将在一个线程上完成。接下来我们将看看nodejs的处理方式,它是单线程工作的,你可能有疑问了,天呢,多线程都不一定能处理的完那么多请求,单线程如何工作呢
大家不要疑惑了,我们先来看看再说,nodejs是把所有的工作都添加到一个事件队列中去,是啥意思呢
先上图:注我在nodejs+mongodb+angular这本书上看到一个不错的例子,决定就用这个例子了
这个图的例子很好的解释了nodejs的工作过程,现在有两个需求,一个是getFile、 GetData,nodejs将工作添加到一个事件队列中然后有个单独的线程运行这个事件循环把这个工作提取出来,它首先提取GetFile请求执行它,并通过将open回调函数添加到事件队列中来完成,然后它提出getData请求,执行它,并通过将connect()回调函数添加到事件队列中来完成,这种情况持续下去直到没有任何回调函数要执行,请注意,上图中,每个线程的时间不一定遵循直接交错顺序,例如 connect请求比读read请求需要更长时间来完成,所以send发送文件在query查询数据库之前调用