Skip to content

简介

https://cnodejs.org/

https://github.com/cnodejs

https://nodejs.org/zh-cn/

Node.js 不是一门语言也不是一个框架,它是基于 Chrome V8 引擎的 JavaScript 运行时环境,同时结合 libuv 扩展了 JavaScript 功能,使得 JavaScript 能够支持浏览器 DOM 操作,同时具有只有后端语言才有的 I/O、文件读写与操作数据库等能力,是目前使用最简单的全栈式环境。

安装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
➜  ~ nvm --version
0.36.0

➜  ~ nvm ls-remote
...
    v14.14.0
    v14.15.0   (LTS: Fermium)
    v14.15.1   (LTS: Fermium)
    v14.15.2   (LTS: Fermium)
    v14.15.3   (LTS: Fermium)
    v14.15.4   (Latest LTS: Fermium)
    v15.0.0
    v15.0.1
    v15.1.0
    v15.2.0
    v15.2.1
    v15.3.0
    v15.4.0
    v15.5.0
    v15.5.1

➜  ~ nvm ls
       v10.22.1
->       system
default -> v14.12.0 (-> N/A)
node -> stable (-> v10.22.1) (default)
stable -> 10.22 (-> v10.22.1) (default)
iojs -> N/A (default)
unstable -> N/A (default)
lts/* -> lts/fermium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.23.1 (-> N/A)
lts/erbium -> v12.20.1 (-> N/A)
lts/fermium -> v14.15.4 (-> N/A)

➜  ~ node --version
v14.12.0

➜  ~ npm -v
6.14.9

hello world

helloworld.js:

1
console.log('Hello World')
1
2
node helloworld.js
Hello World

这是最简单的例子,目的是证明 Node.js 支持 JavaScript 语法。
Node.js 只是一个 JavaScript 的运行时环境,是构建在 Chrome V8 引擎之上的,也就是说,凡是 Chrome V8 支持的 JavaScript 语法,它都支持,唯一不同的就是浏览器内置的 BOM、DOM 等对象是没有的。

CommonJS

Node.js 是基于 CommonJS 规范的实现,即每个文件都是一个模块,每个模块内代码的写法都必须遵守 CommonJS 规范,多文件调用的核心基于模块对外暴露接口和互相引用,所以 CommonJS 对于学习 Node.js 来说是必须会的知识

hello_commonjs.js:

1
2
3
module.exports = function () {
  console.log('Hello CommonJS!')
}

hello_commonjs_test.js:

1
2
3
const hello = require('./hello_commonjs')

hello()
1
2
node hello_commonjs_test.js 
Hello CommonJS!

HTTP

hello_node.js:

1
2
3
4
5
6
7
8
const http = require('http')

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'})
  res.end('Hello Node.js\n')
}).listen(3000, "127.0.0.1")

console.log('Server running at http://127.0.0.1:3000/')

关于上面的代码,说明如下

  • 引用了 Node.js SDK 内置的名为 http 的模块
  • 通过 http.createServer 创建了一个 HTTP 服务
  • 通过 listen 方法指定端口和 IP 地址,启动服务
  • res 是 HTTP 里的 response(响应)的别名,通过 res 控制对浏览器的操作,设置返回状态吗是 200,设置 HtTP 头字段里的 ContentType 为 text/plain 类型,最后向浏览器返回 Heool Node.js\n 文本,由浏览器解析并渲染。
1
2
node hello_node.js 
Server running at http://127.0.0.1:3000/

通过解释器执行 hello_node.js 文件里的 Node.js 代码,这是典型的 Node.js 执行过程,脚本不需要编译,整体来说还是比较简单的。
浏览器访问127.0.0.1:3000 可以看到网页上显示Hello Node.js

我们把代码稍稍改动一下,创建 hello_node_es6.js 文件,修改后如下:

hello_node_es6.js:

1
2
3
4
5
6
7
8
9
const http = require('http')

http.createServer((req, res) => {
  let status = 200
  res.writeHead(status, {'Content-Type': 'text/plain'})
  res.end('Hello Node.js\n')
}).listen(3000, "127.0.0.1")

console.log('Server running at http://127.0.0.1:3000/')

关于上面的代码,说明如下:

  • var 变成了 const
  • http.createServer 里的匿名函数变成了 ES6 里的箭头函授
  • 为了演示方便,用 let 声明了 status 变量

实现的效果和原理都是一模一样,只是语法上有些不同而已