什么是nodejs

121 阅读3分钟

通俗来说,node.js是基于chrome V8引擎开发的一个javascript代码运行时环境。我以前一直不理解什么是运行时环境,直到最近加入到某个项目中,才算是能理解一点:所谓的运行时环境,就是你的代码能在这个环境中运行。以前学习时总是按照教程先装node环境,然后敲代码,从来没想过为啥要装这个。实际是,当你装了环境,你的代码在这个环境中跑的时候,会经历几个过程:

最开始的就是“词法分析”:编译器将你的代码一个字符一个字符的读入源程序中,然后根据构词规则,识别出一个一个的单词,比如 var a = 2; 在送入编译器中时,会变成 ‘v’,'a',...这种形式,然后编译器根据空格判断到'v','a','r'是连在一起的,就是将其作为一个单词'var'存起来,所以这个时候,经过词法分析后,编译器会得到'var','a','=','2',类似这种合法的字符串。

接着就是“语法分析”:编译器根据识别到的分号(;)或者换行符等等,将保存的单词序列,组合成有意义的“表达式”,“程序”等;

最后就是“词法分析”:我理解这里就是编译器看到 var a = 2;时,知道会分配一块内存空间,保存一个全局变量,供后面调用。

那么,基于上面的分析,我们就很容易理解所谓的node环境,到底指的是什么,它指的就是能识别符合js语法规范的一个环境。作为对比,当你打开cmd环境,输入console.log(123)时,就会因为无法识别而保存。

cmd.jpeg

因为是个人记录,所以前面扯了那么多,总而言之,就是为了方便理解。

但是Nodejs并不是浏览器,它不具有浏览器提供的DOM API,例如window对象,location对象,Document对象,cookie对象,HTMLElement对象。然而,它有自己独特的API,例如:查看进程信息的process对象、操作文件的fs模块、全局的global对象、以及创建web服务的http模块等等(具体可以看官方文档),通过这些API,我们可以操作底层的计算机系统,进行文件或文件夹的创建、文件的读写删除等。

根据上面的分析,我们可以简单看一下Nodejs的基本架构:

node.jpeg

从上图我们可以看到,第一层是Node.js的应用层,也就是基于nodejs开发的实际应用;第二层是nodejs的api层,也就是应用层调用的接口;第三层可以理解为对node api实现的封装,比如你写了console.log(123),在第三层node做的事情就是理解你是要在控制台打印一个输出;第四层就是实际调用的底层相关库函数,比如LibUv负责处理时间循环、c-ares,llhttp/http-parser,open-ssl,zlib等提供DNS解析、HTTP协议、HTTPS和文件压缩等功能;第五层就是操作系统层,这个没什么好说的。

nodejs可以做什么?

基于前面的讨论,我们可以知道,Node.js是区别与浏览器的、运行在操作系统中的javascript运行时环境,再结合上文所说的API,我们也能大致了解它能够做什么事情,下面简单罗列一下相关的接口:

  • FS模块:提供对文件和目录的增删读写等操作;
  • Net模块:提供网络套接字socket,用来创建TCP连接,而TCP连接可以用来访问后台数据库和其他持久化服务;
  • HHTP模块:顾名思义,这个模块主要用来创建http连接;
  • URL模块:用node开发服务端,可以用这个模块来解析客户端发来的URL请求;
  • path模块:用来处理文件路径信息
  • process:前面讲了,主要用来获取进程信息;