原本只是为了方便在VSCode中调试JS代码安装了node.js,但最近看了许多关于 node.js 的文章,心血来潮打算用JS写写后端。
1. 理解node.js
懂一些 JavaScript 和开发 Node.js 应用是两回事儿
node.js 本质上是基于 Chrome V8 引擎的的 JavaScript 运行环境,而非编程语言。node.js 能做的事情很多,但最常用的还是作为 Web 服务器。
1.1 与常见的 Web 服务器区别
Apache就是静态网页服务器,就是将本地页面文件做一个网络映射,可以添加mod来扩展功能,例如php模块就扩展了基于php的CGI动态页面页面能力,代理模块就是成了代理服务器。
nginx同,不过更多主职于代理服务器。
tomcat就是一个Java Servlet容器,换个说法就是基于java的CGI动态页面服务器,静态页面只是一个附属功能。
node.js同样一个容器,换个说法就是基于JavaScript的CGI动态页面服务器,看上去静态页面不算是直接功能。
1.2 与 PHP 对比
理论上 node.js 是可以像 Apache 一样在上面运行 PHP 的,两者并不是同一个层次的概念。但为了便于理解,可以拿最简单的 hello world 程序来进行比较。
用PHP写一段 Hello World:
1. 安装 web 服务器程序(如:Apache)
2. 安装 PHP 引擎,并在 Apache 中进行相应配置
3. 在 web 目录(DocumentRoot)下新建文件 index.php,输入以下代码:
<?php
echo 'Hello World!';
?>
4. 启动 Apache,访问 localhost/index.php
而 node.js 的流程相对简单一些(但代码更长一些),安装 node.js 后,在任意位置新建文件 server.js,输入代码:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World!');
}).listen(3000, '127.0.0.1');
使用 node 命令执行该文件,访问 127.0.0.1:3000 即可
注意到尽管上面的 server.js 能够响应浏览器的请求返回一个(纯文本)文档,但连路由的功能都没有,也无法对 HTTP 动词(GET、POST)做出反应。
手工造一堆轮子明显不现实,还是从一个好的 Web 框架开始吧。
参考
- apache、node.js、nginx、tomcat谁能帮我捋一捋关系? - 知乎 (zhihu.com)
- PHP vs Node.js 深入讨论
- 手撸一个Web Server【基于Node.js原生API】 - 掘金 (juejin.cn)
- GitHub - liuxing/node-abc: 《Node.js入门教程》
- Node.js 的 Web 框架的 3 个层次,理清了就不迷茫 - 知乎 (zhihu.com)
2. Express框架
Express.js 是最早出现的 node.js 框架,到现在依然很流行。它以类似洋葱的顺序调用中间件,没有模块和 MVC 的划分,适合小型的服务。
学习可以参考:
- Express Web Framework (Node.js/JavaScript) - 学习 Web 开发 | MDN (mozilla.org)
- Node.js Express 框架 | 菜鸟教程 (runoob.com)