Node.js入门教程(二十八):GET/POST请求
一、概述在很多场景中我们的服务器都需要跟用户的浏览器打交道如表单提交。表单提交到服务器一般都使用GET/POST请求。本章节我们将为大家介绍 Node.js GET/POST 请求的处理方式。二、获取 GET 请求内容由于 GET 请求直接被嵌入在路径中URL 是完整的请求路径包括了?后面的部分因此你可以手动解析后面的内容作为 GET 请求的参数。Node.js 中可以使用URL 构造函数解析请求的 URL。URL 对象是 Node.js 中用于解析和操作 URL 的一种标准工具。它提供了方便的接口来访问和修改 URL 的各个组成部分如协议、主机名、路径、查询参数等。示例解析 GET 请求const http require(http); const util require(util); http.createServer((req, res) { res.writeHead(200, { Content-Type: text/plain; charsetutf-8 }); // 使用 URL 构造函数解析请求的 URL const myUrl new URL(req.url, http://${req.headers.host}); // 输出 URL 的各个部分 res.end(util.inspect({ href: myUrl.href, origin: myUrl.origin, protocol: myUrl.protocol, host: myUrl.host, hostname: myUrl.hostname, port: myUrl.port, pathname: myUrl.pathname, search: myUrl.search, searchParams: Object.fromEntries(myUrl.searchParams) })); }).listen(3000); console.log(Server is running at http://localhost:3000);在浏览器中访问http://localhost:3000/user?name教程urlwww.runoob.com返回结果中会显示 URL 各个部分的解析结果。获取 URL 的参数我们可以使用searchParams.get()方法来获取 URL 中的查询参数const http require(http); http.createServer((req, res) { res.writeHead(200, { Content-Type: text/plain; charsetutf-8 }); // 使用 URL 构造函数解析请求 URL const myUrl new URL(req.url, http://${req.headers.host}); // 获取查询参数 const name myUrl.searchParams.get(name); const siteUrl myUrl.searchParams.get(url); res.write(网站名 (name || 未提供)); res.write(\n); res.write(网站 URL (siteUrl || 未提供)); res.end(); }).listen(3000); console.log(Server is running at http://localhost:3000);在浏览器中访问http://localhost:3000/user?name教程urlwww.chenbyte.com返回结果网站名教程 网站 URLwww.chenbyte.comURL 对象的属性和方法属性/方法描述示例输出href完整的 URL 字符串http://example.com:8080/path?foobaroriginURL 的源协议主机名端口http://example.com:8080protocolURL 的协议部分http:host主机名和端口号example.com:8080hostname主机名不包含端口号example.comport端口号如果指定8080pathname路径名部分/pathsearch查询字符串部分含??foobarsearchParamsURLSearchParams 对象{ foo: bar }hash锚点部分含##sectionURLSearchParams 方法方法描述示例get(name)获取指定名称的参数值searchParams.get(foo)append(name, value)追加新的参数searchParams.append(key, val)set(name, value)设置参数存在则更新searchParams.set(foo, new)delete(name)删除指定参数searchParams.delete(foo)has(name)判断参数是否存在searchParams.has(foo)forEach(callback)遍历键值对searchParams.forEach((v,k) console.log(k,v))toString()转换为字符串searchParams.toString()三、获取 POST 请求内容在 Node.js 中处理 POST 请求通常需要通过http模块来接收请求体中的数据。POST 请求数据不像 GET 请求那样包含在 URL 中而是作为请求体发送。接收 POST 数据的方式在 Node.js 中接收 POST 数据时需要监听并处理request对象的data和end事件事件说明data当数据块到达服务器时触发数据块作为回调的参数传递end当整个请求体接收完毕时触发这时可以对完整的 POST 数据进行处理示例处理 POST 请求const http require(http); // 创建 HTTP 服务器 http.createServer((req, res) { // 检查请求方法是否为 POST if (req.method POST) { let body ; // 监听 data 事件逐块接收数据 req.on(data, (chunk) { body chunk; // 累加接收到的数据块 }); // 监听 end 事件数据接收完毕 req.on(end, () { // 输出接收到的 POST 数据 console.log(Received POST data:, body); // 设置响应头和内容 res.writeHead(200, { Content-Type: text/plain }); res.end(POST data received successfully!); }); } else { // 非 POST 请求的处理 res.writeHead(405, { Content-Type: text/plain }); res.end(Only POST requests are supported.); } }).listen(3000, () { console.log(Server is running at http://localhost:3000); });测试 POST 请求可以使用curl命令来测试 POST 请求curl -X POST -d nameexampleage25 http://localhost:3000四、处理 JSON 数据如果 POST 请求发送的是JSON 数据可以在req.on(end)中将接收的数据解析为对象req.on(end, () { try { const parsedData JSON.parse(body); console.log(Received JSON data:, parsedData); res.end(JSON data received successfully!); } catch (err) { res.statusCode 400; res.end(Invalid JSON); } });五、使用 querystring 模块解析 POST 数据querystring模块用于处理 URL 查询字符串和 POST 请求的数据。对于application/x-www-form-urlencoded编码的 POST 请求数据如表单提交querystring模块可以帮助解析请求体将它转换成 JavaScript 对象。基本语法var http require(http); var querystring require(querystring); var util require(util); http.createServer(function(req, res) { // 定义了一个 post 变量用于暂存请求体的信息 var post ; // 通过 req 的 data 事件监听函数每当接受到请求体的数据就累加到 post 变量中 req.on(data, function(chunk) { post chunk; }); // 在 end 事件触发后通过 querystring.parse 将 post 解析为真正的 POST 请求格式 req.on(end, function() { post querystring.parse(post); res.end(util.inspect(post)); }); }).listen(3000);六、完整实例表单提交以下实例表单通过 POST 提交并输出数据var http require(http); var querystring require(querystring); var postHTML htmlheadmeta charsetutf-8title菜鸟教程 Node.js 实例/title/head body form methodpost 网站名 input namenamebr 网站 URL input nameurlbr input typesubmit /form /body/html; http.createServer(function(req, res) { var body ; req.on(data, function(chunk) { body chunk; }); req.on(end, function() { // 解析参数 body querystring.parse(body); // 设置响应头部信息及编码 res.writeHead(200, { Content-Type: text/html; charsetutf8 }); if (body.name body.url) { // 输出提交的数据 res.write(网站名 body.name); res.write(br); res.write(网站 URL body.url); } else { // 输出表单 res.write(postHTML); } res.end(); }); }).listen(3000);七、GET 与 POST 请求对比特性GETPOST数据位置URL 中查询字符串请求体中数据大小限制有URL 长度限制无可见性数据在 URL 中可见数据在请求体中不可见缓存可缓存不可缓存安全性较低数据暴露在 URL较高使用场景查询、获取数据提交、修改数据Node.js 获取方式解析req.url监听data和end事件八、本章小结知识点说明GET 请求数据在 URL 中使用URL构造函数解析查询参数POST 请求数据在请求体中通过data和end事件接收URL 对象提供searchParams操作查询参数querystring 模块解析application/x-www-form-urlencoded格式数据JSON 数据处理使用JSON.parse()解析 JSON 格式的 POST 数据提示在实际开发中推荐使用 Express 框架来处理路由和请求它提供了更简洁的req.query和req.body方法来获取 GET 和 POST 参数避免了手动解析的繁琐工作。

相关新闻

NewTab-Redirect 终极指南:3 步让 Chrome 新标签页自动打开你想要的页面,免费又轻松

NewTab-Redirect 终极指南:3 步让 Chrome 新标签页自动打开你想要的页面,免费又轻松

NewTab-Redirect 终极指南:3 步让 Chrome 新标签页自动打开你想要的页面,免费又轻松 【免费下载链接】NewTab-Redirect NewTab Redirect! is an extension for Google Chrome which allows the user to replace the page displayed when creating a new …

2026/8/18 17:44:09 阅读更多 →
如何搭建B语言编译器bext-lang/b开发环境:Rust与GCC依赖完整教程

如何搭建B语言编译器bext-lang/b开发环境:Rust与GCC依赖完整教程

如何搭建B语言编译器bext-lang/b开发环境:Rust与GCC依赖完整教程 【免费下载链接】b Compiler for the B Programming Language implemented in Crust 项目地址: https://gitcode.com/gh_mirrors/b8/b 想要亲手编译运行诞生于贝尔实验室的 B 语言程序吗&…

2026/8/18 17:44:09 阅读更多 →
Django集成gevent-socketio:runserver_socketio命令与自动发现的完整指南

Django集成gevent-socketio:runserver_socketio命令与自动发现的完整指南

Django集成gevent-socketio:runserver_socketio命令与自动发现的完整指南 【免费下载链接】gevent-socketio Official repository for gevent-socketio 项目地址: https://gitcode.com/gh_mirrors/ge/gevent-socketio 在Django项目中实现WebSocket实时通信&a…

2026/8/18 17:44:09 阅读更多 →

最新新闻

TVS管选型与PCB布局实战:从原理到应用,解决电路防护难题

TVS管选型与PCB布局实战:从原理到应用,解决电路防护难题

1. 从一次深夜的产线故障说起 凌晨两点,手机响了,是产线主管打来的。电话那头的声音带着疲惫和焦虑:“刚下线的这批智能门锁,老化测试时突然有一半都‘挂’了,现象是主控芯片直接不工作,电源指示灯都不亮。…

2026/8/18 21:56:14 阅读更多 →
从GPT-5.6概念到实战:构建高性价比AI模型组合调度系统

从GPT-5.6概念到实战:构建高性价比AI模型组合调度系统

如果你最近在关注大模型领域,可能会发现一个有趣的现象:大家都在谈论“GPT-5.6”,但OpenAI官方并没有发布这个版本。这背后其实是一个由社区驱动的、关于“模型组合”和“配置策略”的热门讨论。它指向了一个比单纯等待下一个“GPT-N”更实际…

2026/8/18 21:56:14 阅读更多 →
PotPlayer 字幕翻译插件免费方案:10分钟跑通百度实时翻译的完整避坑指南

PotPlayer 字幕翻译插件免费方案:10分钟跑通百度实时翻译的完整避坑指南

PotPlayer 字幕翻译插件免费方案:10分钟跑通百度实时翻译的完整避坑指南 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 第…

2026/8/18 21:56:14 阅读更多 →
JetBrains Mono 等宽字体终极指南:3 步告别深夜“字符鬼打墙“

JetBrains Mono 等宽字体终极指南:3 步告别深夜“字符鬼打墙“

JetBrains Mono 等宽字体终极指南:3 步告别深夜"字符鬼打墙" 【免费下载链接】JetBrainsMono JetBrains Mono – the free and open-source typeface for developers 项目地址: https://gitcode.com/gh_mirrors/je/JetBrainsMono 如果你也受够了在…

2026/8/18 21:56:14 阅读更多 →
Windows10专业版安装docker教程

Windows10专业版安装docker教程

一.部署docker环境 1.查看系统环境 2.下载windows版本docker软件 下载地址:https://docs.docker.com/desktop/setup/install/windows-install/ 二、进行docker安装配置 1、开启windows的Hyper-V虚拟化技术 注:重启电脑后进行操作 2.开启 Windows 功…

2026/8/18 21:56:14 阅读更多 →
计算机信息编码:位与上下文的本质解析

计算机信息编码:位与上下文的本质解析

1. 信息编码的本质解析 在计算机科学领域,"信息就是位+上下文"这个看似简单的命题,实际上揭示了数字世界最基础的工作原理。作为一名从业十余年的系统架构师,我经常需要向新人解释这个核心概念——为什么同样的二进制序…

2026/8/18 21:55:13 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →