Node.js从零开始,手把手教你搭建一个简单Web服务器
专为Node.js零基础用户设计,以“从零开始、手把手引导”为核心,聚焦搭建一个简单实用的Web服务器这一明确目标,全程依托Node.js内置核心http模块,无需额外依赖库,步骤清晰,会逐步讲解监听指定端口、区分不同HTTP请求路径、返回基础响应(如纯文本、简单HTML片段)等关键操作逻辑,能帮助学习者快速上手Node.js网络编程入门,建立对Web服务器底层交互的初步直观认知。
你或许听过Node.js是一个强大的后端运行时,但你知道吗?不需要安装复杂的框架,只用Node.js自带的核心模块,就能快速搭建一个Web服务器,这不仅能让你快速入门Node.js,还能帮你理解Web服务器的基本工作原理,今天我们就一步步来,用Node.js从零构建一个能处理请求、返回内容的Web服务器。
先准备环境:安装Node.js
在开始之前,你需要先在电脑上安装Node.js。
- 访问 Node.js官网,下载LTS(长期支持)版本(推荐给初学者,更稳定)。
- 安装完成后,打开终端(Windows用命令提示符或PowerShell,Mac/Linux用终端),输入以下命令检查是否安装成功:
node -v npm -v
如果能看到版本号,说明Node.js和npm(Node包管理器)都安装好了。
第一步:用http模块搭建最简单的服务器
Node.js内置了http模块,专门用来处理HTTP请求和响应,这是我们搭建服务器的核心。
创建项目文件
在电脑上新建一个文件夹(比如叫node-server),在里面创建一个文件server.js。
编写服务器代码
在server.js中输入以下代码:
// 1. 引入Node.js内置的http模块
const http = require('http');
// 2. 定义服务器的端口号(可以自己选,比如3000、8080)
const PORT = 3000;
// 3. 创建服务器:http.createServer()接收一个回调函数
// 回调函数有两个参数:req(请求对象,包含用户请求的信息)、res(响应对象,用来给用户返回内容)
const server = http.createServer((req, res) => {
// 设置响应头:状态码200表示成功,Content-Type告诉浏览器返回的是文本
res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
// 返回内容给浏览器,并结束响应
res.end('Hello,这是我用Node.js搭建的第一个Web服务器!');
});
// 4. 让服务器监听指定端口,启动成功后打印提示
server.listen(PORT, () => {
console.log(`服务器已启动,访问 http://localhost:${PORT} 查看效果`);
});
运行服务器
在终端中进入node-server文件夹,输入:
node server.js
此时终端会显示“服务器已启动...”,打开浏览器访问http://localhost:3000,你就能看到那句问候语啦!
第二步:处理路由——根据不同路径返回不同内容
刚才的服务器不管访问还是/about,返回的都是一样的内容,我们来改进一下,让它根据请求的路径(即req.url)返回不同的页面。
修改server.js的代码:
const http = require('http');
const PORT = 3000;
const server = http.createServer((req, res) => {
// 获取请求的路径
const url = req.url;
// 根据路径设置不同的响应
if (url === '/') {
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
res.end('<h1>首页</h1><p>欢迎来到我的Node.js服务器!</p>');
} else if (url === '/about') {
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
res.end('<h1>关于我们</h1><p>这是一个用Node.js搭建的简单服务器。</p>');
} else {
// 路径不存在时,返回404状态码
res.writeHead(404, {'Content-Type': 'text/html; charset=utf-8'});
res.end('<h1>404</h1><p>页面未找到</p>');
}
});
server.listen(PORT, () => {
console.log(`服务器已启动,访问 http://localhost:${PORT} 查看效果`);
});
现在重启服务器(终端按Ctrl+C停止,再重新运行node server.js),分别访问http://localhost:3000和http://localhost:3000/about,就能看到不同的内容了!
第三步:进阶一点——返回静态HTML文件
总把HTML写在代码里太麻烦,我们可以把HTML保存为单独的文件,让服务器读取并返回,这时候需要用到另一个内置模块fs(文件系统模块)。
创建静态文件
在node-server文件夹里新建一个index.html如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">Node.js服务器首页</title>
<style>
body { font-family: Arial; text-align: center; margin-top: 50px; }
</style>
</head>
<body>
<h1>你好,Node.js!</h1>
<p>这是从静态HTML文件返回的页面~</p>
</body>
</html>
修改服务器代码
更新server.js,用fs模块读取文件:
const http = require('http');
const fs = require('fs'); // 引入fs模块
const path = require('path'); // 引入path模块,方便处理文件路径
const PORT = 3000;
const server = http.createServer((req, res) => {
const url = req.url;
if (url === '/') {
// 读取index.html文件
const filePath = path.join(__dirname, 'index.html'); // __dirname是当前文件所在目录
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
// 读取文件出错,返回500
res.writeHead(500, {'Content-Type': 'text/plain'});
res.end('服务器内部错误');
} else {
// 读取成功,返回HTML内容
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
res.end(data);
}
});
} else {
res.writeHead(404, {'Content-Type': 'text/html; charset=utf-8'});
res.end('<h1>404</h1><p>页面未找到</p>');
}
});
server.listen(PORT, () => {
console.log(`服务器已启动,访问 http://localhost:${PORT} 查看效果`);
});
重启服务器后访问http://localhost:3000,就能看到我们写的静态HTML页面了!
今天我们用Node.js的http、fs、path三个核心模块,搭建了一个能处理路由、返回静态文件的Web服务器,虽然这个服务器比较简单,但它涵盖了Web服务器的基本逻辑:接收请求 → 处理请求 → 返回响应。
如果你想开发更复杂的Web应用(比如处理表单、连接数据库),可以使用Node.js的框架(比如Express、Koa),它们能帮你简化很多工作,但先掌握原生模块的使用,能让你更深入地理解Node.js的底层原理~
现在你可以试着给服务器添加更多功能,比如返回CSS或图片文件,动手试试吧!

