使用node http模块搭建web服务器基础使用,以及实现简单路由小案例


橘子不是唯一的水果
原创
发布时间: 2025-10-11 18:14:30 | 阅读数 0收藏数 0评论数 0
封面
本文将介绍如何使用 Node.js 原生 **http 模块** 搭建一个最基础的 Web 服务器,帮助你理解服务器的底层运行机制。我们将从创建服务器实例开始,逐步讲解 `createServer()` 的用法、请求与响应对象的作用,以及如何通过解析 URL 实现简单的路由功能。通过本教程,你将学会根据访问路径返回不同的 HTML 页面,如首页和关于页,并在访问不存在的地址时返回自定义的 404 页面。内容简洁易懂,非常适合刚入门 Node.js 的同学,为学习 Express 等框架打下坚实基础。
1

什么是Web 服务器

大家如果写过jsp 应该知道tomcat 他也是web服务器的一种 通过ip和端口来访问我们的程序 node也是一样的道理


Web服务器一般指的是“网站服务器”,是某种驻留在因特网上的计算机程序,可以向请求终端提供服务,主要功能时存储、处理和传递网页给“客户”,传递内容一般是HTML文档、图像、样式表或脚本等,也可以放置网站文件以供浏览或下载。


WEB服务器也称为WWW(Word Wide Web)服务器,核心功能就是提供网页信息浏览服务,严格来说Web服务器只负责处理Http协议请求,发送静态页面的内容。



简单来讲就是通过浏览器的ip地址和端口访问你的本地文件或程序

2

访问

我们用到的是node 的htpp模块 Node.js 的 HTTP 模块是其核心模块之一,允许开发者创建 HTTP 服务器和客户端。通过这个模块,你可以轻松地处理 HTTP 请求和响应,而无需依赖其他服务器软件如 Apache 或 Nginx。


  1. 首先创建一个文件叫serve.js(文件名随便起是js就行) 如图1所示
  2. 然后导入http模块
  3. 创建web服务器实例
  4. 启动服务器
  5. 代码如下
// 导入模块
const http = require('http')
// 创建web服务器实例
const server = http.createServer()
// 启动服务器
server.listen(8000,function(){
console.log("服务器启动成功")
});
  1. 命令 node+文件名 启动服务 如图2所示
  2. 然后我们可以查询一下端口 存在就代表启动成功 如图3
3

访问监听

request是请求对象 ,response是响应对象


添加如下代码,如视频1所示 request能获取到客户端的信息 如请求地址 请求方式等

// 监听请求
server.on('request',function(request,response){
console.log(`收到了请求地址为${request.url} 请求方法是${request.method}`)
})



大家有可能发现虽然node有响应但是页面一直没有请求的结果,那是因为我们没有进行响应数据,这时候就需要用到我们的响应对象 response了 修改监听代码如下 效果如视频2所示

// 监听请求
server.on('request',function(request,response){
const text = `收到了请求地址为${request.url} 请求方法是${request.method}`;
// 答应日志
console.log(text)
// 设置响应头 为utf8 不然会乱码
response.setHeader("Content-Type","text/html;charset=utf-8")
// 响应对象返回前端信息
response.end(text)
})
4

响应html

把响应的数据换成html即可 代码如下 图1是效果 图2是浏览器查看的页面


// 导入模块
const http = require('http')
// 创建web服务器实例
const server = http.createServer()

// 监听请求
server.on('request',function(request,response){
const text = `收到了请求地址为${request.url} 请求方法是${request.method}`;
// 答应日志
console.log(text)
// 设置响应头 为utf8 不然会乱码
response.setHeader("Content-Type","text/html;charset=utf-8")
// 响应对象返回前端信息
response.end(`<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>node</title>
</head>
<body>
<h1>测试123</h1>
<div>块级元素</div>
<span>行内元素</span>
<span>行内元素</span>
</body>
</html>`);

})

// 启动服务器
server.listen(8000,function(){
console.log("服务器启动成功")
});
5

简单路由功能

完整代码如下,原理大概意思就是获取路径名 根据路径名匹配文件名,然后判断文件是否存在 存在的话获取文件信息 并进行响应处理 效果如视频所示


import http from "http";
import fs from "fs";
import path from "path";
import url from "url";

// 先创建服务器实例
const server = http.createServer();

// 监听 request 事件
server.on("request", (req, res) => {
// 获取路径名称
const pathname = url.parse(req.url).pathname;

// 获取文件路径
const filePath = path.join(process.cwd(), pathname);

// 判断文件是否存在
fs.access(filePath, fs.constants.F_OK, (err) => {
if (err) {
// 文件不存在
res.writeHead(404, { "Content-Type": "text/html; charset=utf-8" });
res.end("<h1>404 文件不存在</h1>");
return;
}

// 读取文件内容并返回
fs.readFile(filePath, "utf-8", (err, data) => {
// 如果报错就返回错误信息
if (err) {
res.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" });
res.end(`服务器错误${err}`);
return;
}
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
res.end(data);
});
});
})

// 启动服务器
server.listen(8000, () => {
console.log("服务器已启动:http://localhost:8000/");
});
阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载
pdf下载 举报