0037. 第一个 Node.js 服务器程序 - Hello World
1. 📒 概述
- 本节要使用 Node.js 的 http 模块来创建一个简单的 HTTP 服务器,并响应客户端的请求,最终在页面上渲染出
Hello World!
。 - 最终效果如下:
- 往简单了讲,这个效果只需要写简短的一行代码就能实现了。
require('http').createServer((req, res) => res.end('Hello World!')).listen(3000, '127.0.0.1')
。- 随便找个位置新建一个
1.cjs
,将这行代码复制进去,然后执行node 1.cjs
启动服务,再访问 http://127.0.0.1:3000/ 查看最终效果即可。 - 至于其中的实现原理,后边儿慢慢学吧!
2. 💻 demos.1 - Hello World
js
// 加载 Node.js 内置的 http 模块
const http = require('http')
// 在控制台输出提示信息,引导用户访问指定地址
console.log('请打开浏览器,输入地址 http://127.0.0.1:3000/')
// 使用 http.createServer 创建一个 HTTP 服务器
http
.createServer((req, res) => {
// req(请求对象):包含客户端发送的请求信息,例如 URL、HTTP 方法等。
// res(响应对象):用于向客户端发送响应数据。
// 使用 res.end 方法结束响应,并向页面输出 "Hello World!" 文本
res.end('Hello World!')
// 在控制台输出日志提示,表示服务器已正确处理请求
console.log('请求已处理')
})
// 使用 listen 方法启动服务器,监听指定的 IP 地址和端口号
.listen(3000, '127.0.0.1')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- 最终效果:
- 执行
node index.cjs
启动服务。 - 打开浏览器输入地址 http://127.0.0.1:3000/ 访问服务。
- 控制台日志:
- 执行
- 🤔 问:为什么这里要命名为 index.cjs 呢,不能直接写 index.js 吗?
- 在 Node.js 中,如果项目的
package.json
文件中设置了"type": "module"
,则默认使用 ES Module 规范(即import
和export
),而不是 CommonJS 规范(即require
和module.exports
)。 - 如果在
"type": "module"
的项目中使用require
,会报错:ReferenceError: require is not defined in ES module scope, you can use import instead
- 解决方法:
- 将文件扩展名改为
.cjs
,明确告诉 Node.js 使用 CommonJS 规范加载模块。 - 或者,移除
package.json
中的"type": "module"
配置,让项目默认使用 CommonJS 规范。
- 将文件扩展名改为
- 在 Node.js 中,如果项目的
TIP
如果项目需要同时支持 CommonJS 和 ES Module,可以将 CommonJS 文件命名为 .cjs
,将 ES Module 文件命名为 .mjs
,以避免冲突。
3. 💻 demos.2 - 如果要响应中文,需要设置编码方式为 UTF-8 来避免乱码的问题
js
const http = require('http')
console.log('请打开浏览器,输入地址 http://127.0.0.1:3000/')
http
.createServer((req, res) => {
res.end('你好,世界。')
console.log('请求已处理')
})
.listen(3000, '127.0.0.1')
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
js
const http = require('http')
console.log('请打开浏览器,输入地址 http://127.0.0.1:3000/')
http
.createServer((req, res) => {
// 要想让 Node.js 程序输出中文,只需要在输出内容之前将要显示网页的编码方式设置为 UTF-8。
res.writeHead(200, { 'Content-Type': 'text/html;charset=utf-8' })
res.end('你好,世界。')
console.log('请求已处理')
})
.listen(3000, '127.0.0.1')
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 最终效果:
- 修改前:
- 修改后:
- 注:不要在意背景色,背景色仅仅是个人的主题配置,跟上述程序没有任何关系。
- 修改前: