🗣 Wd提问: nodejs静态服务器
🤖 Ai回答: Node.js 静态文件服务器
下面是一个使用 Node.js 创建简单静态文件服务器的完整示例:
基本实现
javascript
const http = require('http');
const fs = require('fs');
const path = require('path');
const url = require('url');
const PORT = 3000;
const ROOT_DIR = path.join(__dirname, 'public'); // 设置静态文件根目录
const server = http.createServer((req, res) = {
// 解析请求路径
const parsedUrl = url.parse(req.url);
let pathname = path.join(ROOT_DIR, parsedUrl.pathname);
// 防止目录遍历攻击
pathname = path.normalize(pathname);
if (!pathname.startsWith(ROOT_DIR)) {
res.writeHead(403);
res.end('403 Forbidden');
return;
}
fs.stat(pathname, (err, stats) = {
if (err) {
// 文件不存在
res.writeHead(404);
res.end(`404 Not Found: ${req.url}`);
return;
}
if (stats.isDirectory()) {
// 如果是目录,尝试返回 index.html
pathname = path.join(pathname, 'index.html');
fs.stat(pathname, (err, stats) = {
if (err !stats.isFile()) {
res.writeHead(404);
res.end(`404 Not Found: ${req.url}`);
return;
}
serveFile(pathname, res);
});
} else {
// 是文件,直接返回
serveFile(pathname, res);
}
});
});
function serveFile(pathname, res) {
// 根据文件扩展名设置 Content-Type
const ext = path.parse(pathname).ext;
const mimeType = {
'.html': 'text/html',
'.js': 'text/javascript',
'.css': 'text/css',
'.json': 'application/json',
'.png': 'image/png',
'.jpg': 'image/jpeg',
'.gif': 'image/gif',
'.svg': 'image/svg+xml',
'.ico': 'image/x-icon'
}[ext] 'text/plain';
fs.readFile(pathname, (err, data) = {
if (err) {
res.writeHead(500);
res.end(`500 Server Error: ${err}`);
return;
}
res.writeHead(200, {
'Content-Type': mimeType,
'Content-Length': data.length
});
res.end(data);
});
}
server.listen(PORT, () = {
console.log(`Server running at http://localhost:${PORT}/`);
});
使用 Express 的更简单实现
如果你可以使用 Express 框架,实现会更简单:
javascript
const express = require('express');
const path = require('path');
const app = express();
const PORT = 3000;
const ROOT_DIR = path.join(__dirname, 'public');
// 设置静态文件目录
app.use(express.static(ROOT_DIR));
// 处理 404
app.use((req, res) = {
res.status(404).send('404 Not Found');
});
app.listen(PORT, () = {
console.log(`Server running at http://localhost:${PORT}/`);
});
使用 `serve` 模块(最简单的方法)
如果你只是想快速启动一个静态服务器而不想写代码,可以安装 `serve` 模块:
bash
npm install -g serve
然后运行:
bash
serve -l 3000 ./public
功能扩展
基本服务器可以扩展以下功能:
文件压缩(gzip)
缓存控制
自动目录列表
支持 HTTP/2
日志记录
支持范围请求(断点续传)
安全注意事项
1、始终验证请求路径,防止目录遍历攻击
2、限制访问的目录范围
3、设置适当的响应头(如 X-Content-Type-Options)
4、考虑添加基本的速率限制
希望这个示例对你有所帮助!根据你的具体需求,可以选择不同的实现方式。
📣 商家广告:





0
IP地址: 6.120.75.14
搜索次数: 0
提问时间: 2025-11-10 02:13:46
🛒 域名购买:
vj.gs
9-9.net
761.net.cn
souru.com.cn
23.plus
94.plus
yq.gs
gongai.com.cn
396.net.cn
797.net.cn
❓️ 热门提问:
横版挂机游戏
云渲染服务器
远程主机租赁
ICON图标服务器
香港ict
济南做服务器的公司
域名转卖网站
虚拟空间旅游
关键词广告展示广告
网页游戏 挂机
豌豆Ai站群搜索引擎系统
🌐 域名评估:
Daxie.cn
apbpr.com
wt.cx
u.fj.cn
tofh.cn
vzbw.cn
a.info
yu8.js.cn
p.qh.cn
english.sc.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
検索エンジン
Sökmotor Android
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。