给前端程序员的后端小教程

第一章 Hello, Node.js

下面的代码,可能会有点陌生,但请先尝试读一下,我会马上介绍其中的细节。

hello.js
1
const http = require('http')
2
3
const server = http.createServer((req, res) => {
4
// 这里的代码,在“服务器收到 http 请求”后执行
5
console.log('收到请求', new Date()) // 打印日志
6
res.write('Hello, Node.js') // 回信内容(响应内容)
7
res.end() // 回信完毕
8
})
9
10
server.listen(8080)
11
console.log('ok')

我想激动地告诉你,这已经是一个完整的 Node.js 后端程序了。 你可以复制上面的代码,粘贴到某个文件里(比如 hello.js),然后在命令行:

Terminal window
node hello.js

当看到控制台打印出 ok 时,这个后端程序已经起来了。 现在你可以在浏览器输入 http://127.0.0.1:8080/ 来访问这个服务器了。 下面我来介绍一下这几行代码。

第 1 行

前端程序员应该不陌生:js 的世界里,存在两种模块化方案:cjs 和 esm。
const http = require('http')Node.js 默认的方案。

不管是 import 还是 require 我们都知道是“导入”某模块或库, 比如前端常见的 import React from 'react' 是导入 React。 而 react,一般是通过 npm 安装的:

Terminal window
npm install react

npm 会帮我们下载 react,然后放到 node_modules 文件夹里。
那么 const http = require('http') 里的 http 模块是哪来的呢?
答:是 Node.js 里的。

就像我们在写前端代码时,可以使用 window, document, fetch, localStorage……
我们把这些东西叫做浏览器的“内置对象”。

http 模块是 Node.js 的“内置模块”。

重点来了:

http 模块 里包含一些处理 “http 通信” 的东西:

接收 http 请求?这是 hello.js 的第 3 到 10 行。

第 3~8 行

hello.js
1
const http = require('http')
2
3
const server = http.createServer((req, res) => {
4
// 这里的代码,在“服务器收到 http 请求”后执行
5
console.log('收到请求', new Date()) // 打印日志
6
res.write('Hello, Node.js') // 回信内容(响应内容)
7
res.end() // 回信完毕
8
})
9
10
server.listen(8080)
11
console.log('ok')

这 6 行代码,很像前端添加“点击事件”监听器:

1
document.getElementById('target').addEventListener('click', () => {
2
// 这里的代码,在“用户点击”后执行
3
console.log('点了一下')
4
})

而这 6 行代码的意思是:当收到 http 请求,执行:

1
console.log('收到请求', new Date()) // 打印日志
2
res.write('Hello, Node.js') // 回信内容(响应内容)
3
res.end() // 回信完毕,相当于上一章 “带饭请求” 和 “拒绝带饭” 里的 “over”

不管收到的是什么请求、附带了什么数据,都响应 Hello, Node.js。 所以,你可以打开 postman,尝试发一个 POST 请求,或一个怪异的 url,再加一些数据, 只要 ip 和 端口号不变,这个请求就能到 hello.js 这个程序里,就只能返回 Hello, Node.js

第 10 行

在第 3~8 行,我们创建了一个 http server 对象, 创建后,它不会马上开始工作, 而是等我们调用 server.listen() 方法后,才正式开始。

在第 10 行,我们调用了 server.listen() 方法,并顺便传过去一个端口号(8080), 于是这个后端程序就开始工作了。

上一章    最重要的一章 下一章    收信、回信