node.js开发系列[1]-开端

Node.js

Node.js 是基于 V8 语言引擎的异步 IO 的 JavaScript 编程平台。其官方网站是这样给出的定义:

Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.

作为一个异步事件驱动的 JavaScript 运行时,Node 被设计为去创建高扩展性的网络应用程序

本系列教程,我将带领大家快速学习 Node.js 开发的基本知识。为后续 《Koa 系列教程》 《Mongodb 系列教程》和 《基于 Node.js 的 CMS 系统开发》做铺垫。本教程一方面是自己的学习心得总结和梳理,另一方面也是网络上学习资料的总结和搬运,如有疑惑欢迎进行深入交流。

大纲

本教程将从如下几个方面来学习和讲解 Node.js

  1. Node.js 的安装和运行 (本文所在章节)
  2. npm 包的使用
  3. 简要介绍 Node.js 的基本内置模块
  4. Node.js 中的流处理
  5. 使用 pm2 来部署 Node.js 应用

安装

Node.js 的安装及其简单。对于 windows 用户可以直接打开 https://nodejs.org, 点击首页的 Node.js 下载按钮进行 “下一步下一步” 安装即可。目前本文写作时 Node.js 的版本为 8.11.3(LTS) 和 10.8.0(current).

所谓 LTS 版本,即官方长期支持的版本,这个意味着该版本可以用在生产环境。因为它比较成熟,且会被官方持续修复该版本的 bug 并认真对待。除此之外,可以对 Node 的版本类型有个了解:

  • Stable 是当前稳定版本
  • LTS 是长期支持版本
  • Maintenance 是维护,不再增加任何 feature,仅做重大 bug 修复

对于 mac 用户,则可以使用 包安装 的方式来安装

1
brew install node

基于此,在 mac 上我常常通过 brew 的 update 功能时刻保持 Node.js 的最新。

对于 Unix/Linux 等用户,同样有自己的包管理系统,只是可能 镜像源 里没有最新的 node 版本,为此 Node.js 官方也提供了各种包管理系统的安装方案,建议大家自己在 官方文档 里学习即可

REPL

对于大多数语言,都有一个所谓的 REPL 环境来编写和测试代码。例如 python 就可以在命令行里输入 python 从而进入 REPL 模式

对于 Node , 同样有这样一个模式。只需要在终端内执行:

1
node

之后终端会进入 REPL 模式,你可以输入任何合法的 Node.js 代码,例如:

1
2
3
var result = url.parse("https://www.baidu.com");
// 回车之后再输入以下语句查看结果
console.log(result);

运行 Node.js 代码文件

对于大量的业务逻辑肯定不适合在 REPL 命令行里执行,REPL 仅仅适合做测试而已。对于完整的业务逻辑,我们可以在单独的文件中编写 Node.js 代码,然后将文件保存为 .js 扩展名的文件。

例如,我们可以使用 Node.js 内置的 http 模块 来创建一个简易的 web server.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// server.js
const http = require("http");
const hostname = "127.0.0.1";
const port = 8080;
// create a http server
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain");
res.end("hello create server\n");
});
// start listen port
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}`);
});

上面的代码我们保存为 server.js, 然后在终端中输入 node server.js 来执行这个文件。这个命令相当于:

使用  node 这个编程平台去解析并运行 server.js 文件内的所有代码。

最终,node 会读取我们编写的代码并执行,因此会创建一个监听了本机 8080 端口的一个 socket,且能接收并解析 http 报文请求,并触发我们代码中的 回调函数,执行我们的 响应逻辑

Node.js 的优势

Node.js 可以用来开发高性能的 IO 密集型的 Web 服务器和实时应用。得益于其特性,Node.js 常被用作:

  • 高性能的 Web 接入层
  • 实时的聊天程序
  • 游戏等互动性实时性强的应用

但 Node.js 不适合计算密集型的应用,因为在默认的线程模型下,Node.js 无法在进行 CPU 计算时实现异步,然而这可以通过创建新的进程并配合 C++来解决。所以总体上来看,Node.js 其实是优先定位再高性能接入层、API 网关,其次也可以具有其他计算密集型应用的开发能力。

Node.js 与前端

不得不提的是,Node.js 的发展给前端开发、前端工程化带来了革命性的变化。基于 Node.js 与 JavaScript 语言同构的特性,前端构建工具、前端打包、压缩工具、服务端同构渲染成为可能,极大地提高了前端的开发效率和工程化能力。

因此,前端的发展离不开 Node.js 的发展。

目前 Node 已经支持了大部分 ES6 特性。v7.6 之后也支持了 async await 特性,Node 没有浏览器的历史包袱 其中对 v8 的升级几乎做到了与 Chromium / Google Chrome 同步,可以紧跟 V8 等新语法特性的步伐。

总结

本文简单介绍了 Node.js 的基本概念和优劣势,并对其安装方法做了简单介绍。后面我们就去了解下 Node.js 平台提供给开发者的基本能力—也就是 api 了,从而可以感受到 Node 给 JavaScript 开发者带来的开发脱离浏览器应用的可能

Refer

Node 官网