如何用 http 模块创建一个基础的 Web 服务器处理请求

http.createServer() 创建服务器实例后必须调用 .listen() 绑定端口,否则静默退出;req/res 是原生对象,需手动处理路径解析、响应头、res.end()、POST 数据流及错误捕获。用 http.createServer() 启动最简服务Node.js 的 http 模块自带,不用装包,直接 require('http') 就能用。核心是 http.createServer(),它返回一个服务器实例,调用 .listen() 才真正绑定端口。常见错误:只调了 createServer() 没调 .listen(),程序静默退出,浏览器访问超时;或者端口被占用,报错 Error: listen EADDRINUSE。createServer() 的回调函数接收两个参数:req(http.IncomingMessage)和 res(http.ServerResponse),不是 Express 那套 req/res,没 req.query、没 res.json()必须手动设置响应头,比如 res.writeHead(200, {'Content-Type': 'text/plain'}),否则浏览器可能乱码或下载文件必须显式调用 res.end(),哪怕只写 res.end('ok'),漏掉会导致连接挂起、请求卡死读取 URL 路径和查询参数得自己解析req.url 是原始字符串,比如 /user?id=123,不自动拆解。想拿到路径或参数,得靠 url.parse() 或更现代的 new URL()。容易踩坑:直接用 req.url.split('?')[0] 处理路径,遇到带 %20 或中文会出错;或者用 querystring.parse() 解析但没做 req.setEncoding('utf8'),导致 Buffer 乱码。推荐用 new URL(req.url, 'http://localhost'),兼容性好,自动解码,url.pathname 和 url.searchParams.get('id') 直接可用如果用 url.parse(req.url, true),第二个参数 true 表示自动解析 query 成对象,但注意 Node 15+ 已废弃该方法别在 req 上监听 'data' 事件前就调 res.end(),POST 请求体还没读完就关响应,客户端收不到完整结果处理 POST 数据要手动拼接 chunkreq 是个可读流,POST 的 body 默认以 Buffer 分块传来,不会自动聚合。不处理,req.body 这种东西根本不存在。 Trenz AI驱动的社交电商营销平台,专为TikTok Shop设计

相关推荐
@insist1236 小时前
信息安全工程师-数据库安全全体系解析与最佳实践
数据库·安全·软考·信息安全工程师·软件水平考试
MY_TEUCK7 小时前
【2026最新Python+AI学习基础】Python 入门笔记篇
笔记·python·学习
赢乐7 小时前
大模型学习笔记:检索增强生成(RAG)架构
人工智能·python·深度学习·机器学习·智能体·幻觉·检索增强生成(rag)
_ku_ku_7 小时前
数据库系统原理 · 事务管理与恢复 · 自学总结
数据库·oracle
lifewange9 小时前
Redis 集合(Set)运算完全指南
数据库·chrome·redis
TDengine (老段)9 小时前
TDengine RAFT共识协议 — 选举、日志复制、快照与仲裁
android·大数据·数据库·物联网·架构·时序数据库·tdengine
浪里行舟9 小时前
你的品牌正在被AI“遗忘”?用BuildSOM找回搜索的下一个风口
人工智能·python·程序员
Full Stack Developme10 小时前
Spring Boot 事务管理完整教程
java·数据库·spring boot
码界筑梦坊10 小时前
120-基于Python的食品营养特征数据可视化分析系统
开发语言·python·信息可视化·数据分析·毕业设计·echarts·fastapi
logo_2810 小时前
Xpath语法规则的学习和使用
javascript·python·xpath·xpath语法