Node.js 不是一门语言,而是一个基于 V8 引擎的运行时环境,下图是一张架构图。
由图可知,Node.js 底层除了 JavaScript 代码之外,还有大量的 C/C++ 代码。
常说 Node.js 是单线程的,但这个单线程是指处理 JavaScript 的主线程是单的,像 I/O 任务都是多线程处理的。
一、准备
要开发 Node.js 应用,首先需要下载安装 Node.js,点击下一步下一步就可完成。
值得一提的是,在官网中,还配套了一份 50 多篇的入门教程,每篇都不长,蛮通俗易懂的,可以阅读一下。
然后需要一个编辑器,IDE编辑器(例如 VS Code、WebStream),或者是带语言着色的文本编辑器(例如 CotEditor)都可以,看个人喜好。
写完一个简单的脚本文件后,触发命令 node xx.js 就能运行了。
Node.js 在国内有个著名论坛 CNode,其中有许多优秀的 Node.js 资料可供参考。
目前的前端开发肯定会涉及到工程化,所以或多或少需要 Node.js 环境,用 npm 命令下载或管理包。
但是如果要开发实际应用,那么就得需要了解 Node.js 的模块。
二、模块
Node.js 赋予了 JavaScript 很多没有的能力,例如读写文件、发起跨域的网络请求、连接数据库等。
前端边界因 Node.js 变得很广,一个前端也可以做后端的工作,俗称全栈工程师。
在阅读 Node.js 的官方文档时,就会发现内容很详尽,很多细节都会讲到。
只是没有上下文语境,缺乏代入感,有时候文档读起来就比较晦涩。
进入到官方文档后,在左边的菜单栏中有 60 多个选项,直接读的话,会让人睡着。
一般的话,可以配合其他教程,然后将官方文档作为参考资料,当遇到不太明白的地方,再有针对性的浏览,效果会更佳。
本文推荐几个常用的模块,包括 fs文件模块、http协议模块、path路径模块、global全局变量和 module模块化。
日常项目开发中肯定会涉及到上述一个或多个模块。
三、框架
真正项目开发时,很少需要从零开始,选择成熟的框架主要就是为了提升工作效率。
市面上的框架有很多,例如 Express、KOA、egg.js、Next.js、Nuxt.js 等,这些框架都有对应的中文文档。
以我公司为例,选择的是 KOA 框架,这是一个短小精悍的框架,源码只有 4 个文件。
虽然简单,但扩展性很高,可以通过中间件的形式加载进来,例如路由、日志、权限验证、JWT认证等。
在将开发环境搭建好后,还得布置单元测试,框架都能集成单元测试,只要简单的配置即可。
在 Node.js 中,有很多单测框架可供选择,例如 Mocha、Jest等,断言库包括 Chai、assert 断言模块等。
接口测试有 SuperTest,测试替身库有 Sinon,可以模拟数据库读记录。
四、数据库
开发 Node.js 的项目,离不开数据库的处理。常用的数据库有 MySQL 和 MongoDB。
MySQL 官方给出的可视化操作工具是 Workbench,MongoDB 官方给出的可视化操作工具是 Compass。
直接用 Node.js 作为项目持久层的并不多,很多时候都是作为数据中间层的角色存在。
因此,对数据库的处理并不是很复杂,常用的也就是增删改查,其中删除很少是物理删除,基本都是改个状态。
以 MySQL 为例,常用的就是下面三类 SQL 语句。
select * from table where id = 1; update table set name = 'strick' where id = 1; insert into table(name) values ('strick');
当然,在日常开发中不需要手写拼接 SQL 语句,既为了安全,也是为了可维护。
所以就需要常用的 ORM(对象关系映射),例如 MySQL 的 Sequelize,MongoDB 的 mongoose。
至此,开发一个常规 Node.js 应用所需的知识储备,已全部涉及到,接下来就是熟能生巧的过程了。