首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Node.js基础9:web服务器2 处理 GET 或 POST 请求发送的数据

Node.js基础9:web服务器2 处理 GET 或 POST 请求发送的数据

作者头像
代码之风
发布于 2019-04-19 01:34:48
发布于 2019-04-19 01:34:48
2K00
代码可运行
举报
文章被收录于专栏:马涛涛的专栏马涛涛的专栏
运行总次数:0
代码可运行

处理 GET 或 POST 请求发送的数据

处理GET请求

server中的 request.url会把查询字符串也带过来

解决方法:

使用url库解析, 这样pathname就是查询字符串前面的字符串, url库可以对url进行一些处理,可以取一些主机名,协议之类的数据

例如我们接下来将查询字符串解析为键值对的形式:

server.js

将解析过后的params一层层传到handle里,然后处理

交给/api/v1/records 这条路来处理:直接将这个json字符串转化为对象相应给前端

结果:

var params = url.parse(request.url, true).query;true这个参数代表返回一个JSON对象形式的字符串(本质上是一个字符串),如果是false,就直接返回完整的查询字符串:如下

处理POST

在index.html建一个简单的表单发送post请求先进入index.html,再通过表单进入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form action="/api/v1/records" method="post">
        name: <input type="text" name="name" /> age: <input type="text" name="age" />
        <input type="submit" value="Submit">
    </form>

注意:url库只能解析get发送的请求 修改代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var http = require('http');
var fs = require('fs');
var url = require("url")
var querystring = require("querystring")//querystring用来将post请求中的数据解析为对象
function startServer(route, handle) {
    var onRequest = function(request, response) {
        var pathname = url.parse(request.url).pathname
        console.log('Request received ' + pathname);
        var data = ''
        request.on('error',function(err){
            console.error(err)
        }).on('data',function(chunk){
            data+=chunk
        }).on('end',function(){
            if(request.method === "POST") {//如果是post请求,就这样处理,还是那传过来的数据都转化为对象,再丢给handle
                route(handle, pathname, response, querystring.parse(data));//这里将post请求发送来的数据解析为json对象的形式
            }else if(request.method === "GET"){//如果是get请求
                var params = url.parse(request.url, true).query;//转化为一个json对象(本质上是对象)
                route(handle, pathname, response, params);//拿到查询字符串
            }
        })
    }

    var server = http.createServer(onRequest);

    server.listen(3000, '127.0.0.1');
    console.log('Server started on localhost port 3000');
}

module.exports.startServer = startServer;

post和get请求都ok

优化一下程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var http = require('http');
var fs = require('fs');
var url = require('url');
var querystring = require('querystring');

function startServer(route, handle) {
    var onRequest = function(request, response) {
        var pathname = url.parse(request.url).pathname;
        console.log('Request received ' + pathname);
        var data = [];//将data声明为数组,
        request.on("error", function(err) {
            console.error(err);
        }).on("data", function(chunk) {
            data.push(chunk);//
        }).on('end', function() {
            if (request.method === "POST") {
                if (data.length > 1e6) {//判断长度,及时取消响应
                    request.connection.destroy();
                }
                data = Buffer.concat(data).toString();//使用流
                route(handle, pathname, response, querystring.parse(data));
            } else {
                var params = url.parse(request.url, true).query;
                route(handle, pathname, response, params);
            }
        });
    }

if (data.length > 1e6)科学计数法,如果数据量很大,就把请求取消,不然会增加服务器的负载,使服务器宕机

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
不错的node.js入门
关于 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识。本书绝不是一本“Hello World”的教程。 状态 你正在阅读的已经是本书的最终版。因此,只有当进行错误更正以及针对新版本Node.js的改动进行对应的修正时,才会进行更新。 本书中的代码案例都在Node.js 0.6.11版本中测试过,可以正确工作。 读者对象 本书最适合与我有相似技术背景的读者: 至少对一门诸如Ruby、Python、PHP或者Java这样面向对象的语言有一定的经验;对Ja
脑洞的蜂蜜
2018/02/02
4K0
Node.js基础9:web 服务器1 请求与响应、路由
例如我们访问一个网站,www.123.com/index 这个/index就是路由,访问不同的页面路由就不一样,后台处理的方式也不一样,这样用来请求不同的资源. request.url获取浏览器传过来的路由信息,然后根据路由进行判断 server.js
代码之风
2019/04/19
9530
Node.js基础9:web 服务器1 请求与响应、路由
Node.js 路由
我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码。
陈不成i
2021/07/12
2.3K0
[NodeJS]创建HTTP、HTTPS服务器与客户端
当从客户端请求流中读取到数据时会触发data事件,当读取完客户端请求流中的数据时触发end事件。
奋飛
2019/08/15
5.6K0
36·灵魂前端工程师养成-[前后分离]AJAX实战Cookie、Session
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
8290
36·灵魂前端工程师养成-[前后分离]AJAX实战Cookie、Session
node函数 node路由
访问连接 http://127.0.0.1:1937/hello%20word.html
mySoul
2018/07/26
9690
【nodejs】nodejs 入门实战教程 —— 从上传实例出发
方案:使用一个主文件,它可以被nodejs执行,同时建立不同功能的模块,这些模块可以被主文件和其他模块调用。
前端修罗场
2023/10/07
4880
【nodejs】nodejs 入门实战教程 —— 从上传实例出发
前端技术前沿7
使用response.writeHead()函数发送一个HTTP状态200和HTTP头的内容类型content-type,使用response.write()函数在HTTP相应主体中发送文本。
达达前端
2019/07/03
5580
前端技术前沿7
肢解 HTTP 服务器构建
所有请求数据都在 request对象中,数据解析,还需要 url, querystring模块
超然
2018/08/03
1.4K0
肢解 HTTP 服务器构建
怎样用Node.js搭建web服务器
Node.js作为一个高性能的JavaScript运行时,让JavaScript能够在服务器端发挥巨大的作用。本文将深入探讨如何利用Node.js的HTTP模块构建一个高效的HTTP服务器,从基本的请求响应到复杂的请求处理,以及服务器代码的模块化管理。
闻说社
2024/06/14
4610
怎样用Node.js搭建web服务器
开心档-软件开发入门教程网之Node.js GET/POST请求
Node.js GET/POST请求 在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交。 表单提交到服务器一般都使用 GET/POST 请求。 本章节我们将为大家介绍 Node.js
爱学iOS的小麦子
2023/05/09
3790
node初级入门之搭建http服务器
​ 前置知识: 了解IP地址和端口是什么 http请求的大致过程(这个建议买本《图解http》看看) http核心模块的使用 导入http模块 定义服务器程序端口 创建服务器对象 调用服务器的监听方法,让服务器监听浏览器需求 // 1、导入http模块 const http = require("http"); // 2、定义服务器程序端口 const port = 8080;// 端口号:1-65535 (有些服务已经有一些默认端口 apache nginx 80 web 服务。 MySQL:3306
henu_Newxc03
2021/12/26
2K0
Node
想要实现其他复杂的操作和效果,都要依靠 宿主环境 提供API,目前,已经嵌入 JavaScript 的宿主环境有多种,最常见的环境就是 浏览器 和 操作系统 ;
jinghong
2020/05/09
11.1K0
Node
前端 er,什么时候,你想写一个 HTTP 服务器?
当你第一次接触工程化的项目时,看到项目控制台正在 building,过一会突然跳出一个 URL 地址,你点开它居然是你刚写好的网页,好神奇。
杨成功
2022/03/09
1.1K0
四、node服务器搭建
静态服务器实现与读取网页返回几乎一致,通过request.url可以获取用户访问的路径。
Dreamy.TZK
2020/07/06
2.1K0
四、node服务器搭建
Node·七天学会 NodeJS
以上程序使用 fs.readFileSync 从源路径读取文件内容,并使用 fs.writeFileSync 将文件内容写入目标路径。
数媒派
2022/12/01
2.3K0
node web模块 (服务器端和客户端)
web服务器指网站服务器,指驻留在因特网上的某种程序,web浏览器的基本功能,提供信息浏览服务
mySoul
2018/07/28
2.2K0
35·灵魂前端工程师养成-使用nodejs实现简单nginx功能
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/10/31
6780
35·灵魂前端工程师养成-使用nodejs实现简单nginx功能
14·灵魂前端工程师养成-代码实现HTTP
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
4580
14·灵魂前端工程师养成-代码实现HTTP
Node.js基础教程
Node.js 的推出,不仅从工程化的角度自动化掉更多琐碎费时的工作,更打破了前端后端的语言边界,让 JavaScript 流畅的运行在服务器端,本系列课程旨在引导前端开发工程师,以及 Node.js 初学者走进这个活泼而有富有生命力的新世界。
达达前端
2022/04/29
5950
Node.js基础教程
相关推荐
不错的node.js入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验