一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情。
前言
NodeJS是一门后端语言,理论上任何后端语言能做的事Node也能实现。但是Node之所以没有被广泛应用在后端领域,其原因是:
- Node 出现的比较晚,开发的生态环境还没有其他语言成熟。
- JS 是一门解释性语言,Node 也是无法摆脱这一设定,解释性语言的一些原罪也无法避免。
本文作为将以原生的 Node Api 进行讲解,帮助大家理解和掌握 NodeJS 最基础的使用方式。
什么是 Node
Node是一个JS的运行环境。
Node JS 是一种单线程的异步回调模式,好处在于没有线程之间的竞争。详情《线程和进程》。 Node 的 IO 速度是非常快的,缺点就是不适合进行大量的运算。
浏览器中的 JS
我们之前 JS 的运行环境通常都是在浏览器中运行的,但是现在Node也能作为JS的运行环境。有一个约定俗成的说法:
- JavaScript 指的是浏览器端运行的 JS
- NodeJS 指的是在node环境运行的 JS
EcmaScript 是我们JS的语言标准,它跟运行环境无关,只需要解释器,就能够运行。
Web Api 是浏览器给我们提供的,通常包括一些 DOM 或者 BOM 操作。然而在浏览器端为了安全考虑是有很多限制。例如:跨域、文件读写... 然而这并不代表 JS 这门语言不能实现这些功能。
Node 环境中的 JS
在 Node 环境中新增了 Node 的 api,我们主要介绍的就算 node api。Node 提供了完整的控制计算机能力接口 node api, 可以直接操作我们的操作系统,实现任何我们想要的功能。
Node 其实是继承自谷歌的 V8 引擎,最终JS语言会编译为 C++, C++ 语言能被操作系统识别,从而操作我们的计算机。
Node 的应用
Node 也慢慢的进入到我们的开发中。Node 通常被用来开发桌面应用程序和开发服务器应用程序。
然而我们主要介绍的是开发服务器应用程序。我们日常工作的开发结构通常是前后端分离的模式。利用 Node 搭建服务层通常应用在微型的站点上。Node 服务器要完成请求的处理、响应、数据库交互、各种业务逻辑。
然而更常见是模式是将 Node 服务器当一个中间服务器, 处理庞大的业务逻辑和读取数据库则是用其他后端语言编写的后端服务器。利用 Node 来搭建中间层的好处在于 Node 具有强大的吞吐量,能快速响应请求。Node 服务器不做任何与业务逻辑有关的事情。 绝大部分的时候只是简单的转发请求,也可能会有一些额外的应用场景。 例如:简单的信息记录、静态资源托管、缓存...
Node 全局对象
当我们在控制台打印全局对象 global (凡是全局对象都可以直接调用。)
跟window对象有很多相同的属性。有个小区别是setTimeout返回的不是一个数字而是一个对象。
setImmediate的用法类似于setTimeout(可以看作是setTimeout第二个参数传的是0,之后将在Node的生命周期中详细介绍)。
__dirname: 表示当前模块所在目录,非global属性。
__filename: 表示获取当前模块的文件路径,非global属性。
Buffer: 类型化数组。并不是ES6的 Buffer api。由于 node 的出现时间是比 ES6 更早的,所以在之前使用的是 Node 提供的 Buffer。在ES6之后就改为继承自 UInt8Array。一般在读文件,或进行流操作时使用
process:
-
cwd: function 当前命令行路劲 -
exit:function 强制推出 node 进程 -
argv:string\[] 命令行参数 -
platform: string 当前的操作系统 -
kill:function 结束进程 -
env:function 获取环境变量