单元三 做一个网络服务 · 第 11 课

运行环境:让程序跑起来

这一课你会运行人生中第一个服务器:它只会说一句“你好”,但它真的在等待访问、回应请求。

本课目标

  • 装好 Node.js,知道它是做什么的。
  • 让 AI 写一个最小的网页服务器。
  • 学会启动、访问、停止服务器,以及处理“端口被占用”。

先懂概念:程序和运行环境

我们的周报助手会用 JavaScript 语言来写。JavaScript 程序需要一个“引擎”来运行,这个引擎就是 Node.js,就像 Word 文档要用 Word 打开一样。

Node.js 自带一个软件下载工具 npm,以后可以用它安装别人写好的功能。这门课的项目特意不依赖任何第三方软件,只用 Node.js 自带的功能,减少出错的机会。

跟着做

1. 安装 Node.js

先看看有没有装过:

node --version

显示 v20 或更高的版本号就可以跳过这一步。否则按第 5 课“下载失败怎么办”里的方法安装 Node.js LTS 版,Windows 用户也别忘了那里的 Set-ExecutionPolicy 设置。装好后重开终端再检查一次。

2. 新建项目文件夹

cd ~/ai-course
mkdir weekly-report
cd weekly-report
git init

这个文件夹就是毕业项目“AI 周报助手”的家,后面几课都在这里进行。

3. 让 AI 写一个最小的服务器

codex

发出需求:

请在当前文件夹创建 hello.js:一个只用 Node.js 自带模块的网页服务器。
- 只监听 127.0.0.1,只允许本机访问。
- 监听的端口从环境变量 PORT 读取,没有设置时用 3000。
- 访问首页时显示“你好,这是我的第一个服务器”,注意设置 UTF-8 编码,中文不能乱码。
- 启动时在终端打印访问地址。
- 不要安装任何依赖。
写完告诉我怎么运行。

它写完后,用 /quit 退出 Codex。

4. 启动服务器

node hello.js

终端会打印一行地址,然后停在那里不动。这不是卡住了:服务器就是这样一直开着、等待访问的,这个终端窗口被它占用了。

如果 Windows 弹出“Windows 安全中心”的防火墙提示,说明程序监听了所有网卡,局域网里的其他电脑也可能访问到它。点“取消”,然后让 AI 改成只监听 127.0.0.1。

5. 访问它

打开浏览器,访问 http://localhost:3000,看到那句“你好”。

再打开第二个终端窗口,用 curl 访问:

curl.exe http://localhost:3000
curl http://localhost:3000

一个终端运行服务器,另一个终端做别的事,这是开发时的常见姿势。

6. 停止服务器

回到运行服务器的那个终端,按 Ctrl + C。服务器停了,提示符回来了。这时再刷新浏览器,会显示“无法访问此网站”。

7. 换个端口启动

hello.js 支持用环境变量 PORT 指定端口,正好复习第 6 课的临时环境变量:

$env:PORT = "3001"
node hello.js
PORT=3001 node hello.js

访问 http://localhost:3001。PowerShell 设置的 PORT 会一直留在这个终端里,试完关掉这个终端即可。

8. 存档

先在运行服务器的终端按 Ctrl + C 停止它。如果你按上一步的做法关掉了终端,新开的终端会在家目录,先回到项目文件夹:

cd ~/ai-course/weekly-report
git add -A
git commit -m "第一个服务器"

你应该看到

浏览器和 curl 都显示“你好,这是我的第一个服务器”;按 Ctrl + C 后服务器停止,网页无法访问。

常见问题

报错 EADDRINUSE? 意思是端口已经被占用了,通常是另一个终端里的服务器还开着。找到那个终端按 Ctrl + C,或者换一个端口启动。

浏览器显示乱码? 让 AI 检查响应头里有没有 charset=utf-8。

浏览器显示“无法访问此网站”? 确认服务器的终端还开着、没有报错,地址和端口与终端里打印的一致。

自检

  • node --version 显示 20 或更高。
  • 我能启动服务器,并在浏览器里访问它。
  • 我知道服务器运行时终端会被占用,用 Ctrl + C 停止。
  • 我知道 EADDRINUSE 是端口被占用。