NodeJS 服务器数据处理(表单、json 字符串和普通字符串)

JavaScript简单的读取JSON并生成表格 无聊时写的一个小东西,写的很菜。通过读取JSON,并把其生成表格。其实也就几个步骤:(一)解析文件,把文件转换为JavaScript对象;(二)读取JSON里键和值的长度创建表格;(三)把JSON的键和值填进表格;(四)点击对应信息时生成名片。下面是代码:HTML代码:<!DOCTYPE html> <html lang="en"> <head> &lt... 阅读详情

在这里插入图片描述


阅读原文


前言

从浏览器向服务器提交数据时,常见有表单提交,JSON 字符串提交和普通字符串提交,不同情况需要附带不同的请求头信息,告诉服务器客户端可以直接解析的数据格式,如果发送的数据为 json 字符串,后两种类型都可以成功发送到服务器,只是加上请求头信息服务器更容易判断该以什么格式返回数据。


querystring 模块解析请求体

在 get 请求中,我们可以通过 url 模块的 parse 方法来解析,如果是带有请求体的请求类型,如 post、put 我们应该使用 querystring 模块的 parse 方法将请求体中的数据解析成对象,在这个方法中有三个参数。

  • str:要解析的查询字符串;
  • sep:查询字符串中键值对之间的分隔符,默认为 &;
  • eq:查询字符串中的键与值的分隔符,默认为 =。
// 文件:querystring-test.js
const querystring = require("querystring");

let str1 = "name=pandashen&age=27";
let str1 = "name*pandashen!&age*27";

let obj1 = querystring.parse(str1);
let obj2 = querystring.parse(str2, "!&", "*");

console.log(obj1); // { name: 'pandashen', age: '27'}
console.log(obj2); // { name: 'pandashen', age: '27'}

querystring 也是很常用的模块,就在这里多说几句关于原理相关的内容,模拟 querystring 模块常用方法 parse 的代码如下。

// 文件:my-querystring.js
exports.parse = (str, sep = "&", eq = "=") => {
    // 存储解析出键值的对象
    let query = {};

    // 先将查询字符串切割成 [k=v, k=b] 的形式
    let fields = str.split(sep);

    // 循环将每一项切割成 k 和 v 并存入 queryObj 中
    fields.forEach(field => {
        let [key, value] = field.split(eq);
        query[key] = value;
    });

    // 返回 query 对象
    return query;
};

服务器的实现

向服务器发送请求的请求头为 Content-Type,表单提交、json 和字符串作为请求体时,在 Content-Type 中对应的值分别为 application/x-www-form-urlencoded、application/json 和 text/plain。

其中 text/plain 为 Ajax 的默认提交方式,我们在服务器中针对上面这几种类型的请求头和 get 请求做处理,将发来的数据再次返回客户端。

// 文件:server.js
const http = require("http");
const url = require("url");
const querystring = require("querystring");

const server = http.createServer((req, res) => {
    // 获取 get 请求参数
    let { query } = url.parse(req.url, true);
    // 获取数据类型请求头
    let type = req.headers["content-type"];

    // 接收数据
    let buffers = [];
    res.on("data", data => buffers.push(data));
    res.on("end", () => {
        // 合并数据并设置默认响应头和返回数据
        let data = Buffer.concat(buffers).toString();
        let contentType = "application/json";

        // 判断是否为 get 请求,是则直接返回解析后的数据,不是则判断请求类型
        if (req.method.toLowerCase() === "get") {
            data = JSON.stringify(query);
        } else {
            // 判断请求数据类型并做相应处理
            if (type === "application/x-www-form-urlencoded") {
                data = JSON.stringify(querystring.parse(str));
            } else if (type === "application/json") {
                data = JSON.stringify(JSON.parse(str));
            } else {
                contentType = "text/plain";
            }
        }

        // 设置响应头并返回数据
        res.setHeader("Content-Type", contentType);
        res.end(data);
    });
});

server.listen(3000, () => {
    console.log("server start 3000");
}

当请求类型为 get,将 URL 的查询字符串通过 url 模块解析后再处理成字符串返回客户端。

当请求类型为 post,设置默认响应头为 application/json,如果是表单提交,请求体中的内容为查询字符串格式,使用 querystring 解析后再使用 JSON.stringify 处理成字符串返回,如果是 json,则使用 JSON.parse 解析,并使用 JSON.stringify 处理成字符串返回,如果是默认值 text/plain,则设置响应头的值为 text/plain 并将读取的结果直接返回。


使用客户端进行测试

在这里我们为了方便就不用浏览器访问了,因为上面的服务器代码比较简单,只处理了数据,并没有处理静态文件请求,所以我们通过 NodeJS 来实现客户端。

1、get 请求

// 文件:get.js
const http = require("http");

let config = {
    host: "localhost",
    port: 3000,
    path: "/?name=pandashen&age=27"
};

// 发送 get 请求
http.get(config, res => {
    // 接收服务器返回的数据
    let buffers = [];
    res.on("data", data => buffers.push(data));
    res.on("end", () => {
        let data = Buffer.concat(buffers).toString();
        console.log(data);
    });
});

启动服务器 server.js,通过命令行执行 node get.js 查看命令窗口中输出的结果。

2、post 请求表单提交

// 文件:post-from.js
const http = require("http");

let config = {
    host: "localhost",
    port: 3000,
    method: "post"
    headers: {
        "Content-type": "application/x-www-form-urlencoded"
    }
};

http.request(config, res => {
    // 接收服务器返回的数据
    let buffers = [];
    res.on("data", data => buffers.push(data));
    res.on("end", () => {
        let data = Buffer.concat(buffers).toString();
        console.log(data);
    });
}).end("name=pandashen&age=27");

启动服务器 server.js,通过命令行执行 node post-form.js 查看命令窗口中输出的结果。

3、post 请求 json 字符串数据

// 文件:post-json.js
const http = require("http");

let config = {
    host: "localhost",
    port: 3000,
    method: "post",
    headers: {
        "Content-Type": "application/json"
    }
};

http.request(config, res => {
    // 接收服务器返回的数据
    let buffers = [];
    res.on("data", data => buffers.push(data));
    res.on("end", () => {
        let data = Buffer.concat(buffers).toString();
        console.log(data);
    });
}).end("{ name: pandashen, age: 27 }");

启动服务器 server.js,通过命令行执行 node post-json.js 查看命令窗口中输出的结果。

4、post 请求普通字符串数据

// 文件:post-string.js
const http = require("http");

let config = {
    host: "localhost",
    port: 3000,
    method: "post",
    headers: {
        "Content-Type": "text/plain"
    }
};

http.request(config, res => {
    // 接收服务器返回的数据
    let buffers = [];
    res.on("data", data => buffers.push(data));
    res.on("end", () => {
        let data = Buffer.concat(buffers).toString();
        console.log(data);
    });
}).end("pandashen27");

启动服务器 server.js,通过命令行执行 node post-string.js 查看命令窗口中输出的结果。


总结

通过本篇的内容可以了解 HTTP 在数据传输中的类型,即请求头类型,服务端通过请求头类型可以返回客户端可以直接解析的数据,上面的几种类型只是向服务器提交数据的最常见类型,涵盖表单提交和 Ajax 等,在上传文件时还存在二进制传输等等。


利用node.js实现对json文件的读取等相关操作 首先我们需要了解一下Json文件的数据格式,大致可分为: 第一种: [ {key:name}, .... {key:name} ] 第二种 {key:name} ... {key:name} 第三种 { “name”:"xxxxxxx", "name":[ { "name":[ { "name":"value", "name":"value" }] ]} ... 阅读详情

相关推荐

NodeJS http模块(一)——简单的请求和服务器建立

一个坑的基础是另一个坑的填满 所以跳坑会越跳越深 当你注视着坑的时候 坑连鸟都难得鸟你。 这次我决定开个新坑,node.js的http模块,因为看experss的定义说是对node.js的http模块的补充,于是去拜读了一下node.js的Http模块,并且记录一下心得 简单的http的流程 建立TCP连接-> Web浏览器向Web服务器发送请求命令-> Web浏览器发送...

yaohuom的博客 8793

NodeJS服务端开发极速入门

关于NodeJSNodeJS是Chrome浏览器的V8引擎剥离而成的一款桌面JS解析工具;辅以网络通信、文件和数据库读写等支持类库以后就可以用来做服务端开发了;NodeJS的诞生使得JS成为一门不折不扣的全栈开发语言,如果你喜欢还可以用它来开发桌面应用程序哦(Electron);专业的NodeJS服务端开发已经成为一个需求量不低的招聘岗位;作为靠JS吃饭的前端程序员,如果你能胜任一些基本的后端开发,则【全栈工程师】的价(gong)值(zi)还能再上层楼~课程特色零基础教学,由浅入深,通俗易懂,物超所值;内容体系完整、干货满满:+ NodeJS常用类库+ 流行框架Express基础与实战+流行框架Koa2基础与实战;+ 两大NodeJS主流数据库MySQL与MongoDB极速入门;课程收益掌握基于原生NodeJS开发服务端技能;掌握MySQL+MongoDB数据库的基本使用;掌握基于Express开发服务端技能;掌握基于Koa2开发服务端技能;写在最后就连太阳光照到地球都需要8分钟,所以,你也需要时间,耐心一点,持续修炼。

如何使用 Node.js 读写 JSON 文件

在本教程中,我将向您展示如何使用 Node.js 读取和写入 JSON 文件。使用 运行代码,应该已经在文件旁边创建了一个包含 JSON 数据的node index.js新文件。如果没有创建文件,请检查控制台中记录的错误消息以调试问题。这就是本教程的全部内容。您现在应该了解如何使用简单的 JSON 文件读取和存储数据。如果你喜欢我的文章,记得关注获取更多的信息。好的,现在我们知道如何将 JSON 数据写入文件,现在让我们读取该数据。让我们首先将数据写入 JSON 文件。

我的博客,不一样的自我表达 1139

在JavaScript中用json对象创建一个table表格——实战练习

背景 为了练习和使用js中的创建节点、追加节点以及练习生成json对象和遍历集合。对现阶段学习到的js中的DOM文档对象模型进行阶段总结并进行实践练习。 使用json对象的形式创建table表格 我们先来想一想如何进行实现,实现的步骤有哪几步。 首先我们需要生成一个table,并将这个元素节点追加到body中。 声明json个格式的字符串,申明json对象 根据json对象的长度进行循环,每一次循环都生成一个tr,并将tr追加到table中去。 对json对象中的元素进行遍历,并生成td将元素赋值到td中

理想主义的花最终会盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 4695

解决com.kingbase8.util.KSQLException: This _connection has been closed.

一个消息管理系统,系统采用kingbase8数据库,数据库采用单体模式,后台应用也采用springboot单体模式。系统正式上线后,出现几个JDBC响应的异常信息: com.kingbase8.util.KSQLException: An I/O error occurred while sending to the backend. java.net.SocketTimeoutException: Read timed out.

qq_38127559的博客 2757

ESP32学习,驱动LED点阵屏,SD卡播放GIF动图

搬运就可以实现效果,如果有不足,请批评指正。下步该学一下如何文章上视频了,老是截图不方便展示效果。

u011625956的博客 1868

NodeJs中多个Json合并成一个Json字符串

1.nodejs中把3个json中的同一个字段 合并到第一个Json字符串中,直接上代码 let newJson; let newJson1 = '{"currtype1":"value1","amount1":"111","key3":{"key31":"value 31"}}'; let newJson2 = '{"currtype1":"value2","amount1":"222","key3":{"key31":"value 31"}}'; let newJson3 = '{"currtype1"

fenduo的博客 3069

ESP32IDF 通过 PCA9685控制舵机的程序bug处理

esp32 PCA9685 bug 舵机

ztvzbj的博客 726

NodeJS提交表单存数据库

NodeJS提交表单 index.html 姓名: 性别: 年龄: 手机: $('#ok_btn').on('click',function(){ var name = $.trim($('#name').val()), sex =

kongjunchao159的博客 7016

学习stm32H7之路开始(STM32H7系列1) 前期准备,HAL库框架

2020.01.07 几个重要的参考网址 1.电子工程世界网 http://tags.eeworld.com.cn/tags/STM32H7 链接: link. 2.转:https://blog.csdn.net/simon223/article/list/2?t=1 链接: link. ———————————————— 版权声明:本文为优快云博主「Simon223」的原创文章,遵循 CC 4....

kengkengkeng963的博客 3409

Windows server Database 2025 安装 i225/i226 网卡驱动

Windows server Database 2025 安装 i225/i226 网卡驱动 windows这比坏得很,intel消费级网卡不准在服务器系统上安装。你要说他是异构不支持?他就纯粹恶心人。 之前已经安装过一次,但是今天database预览版一更新,又给我把网卡驱动杀了,气死,写一篇教程。 到这里就完成了,总之还是想辱骂windows,提供便捷的同时又人为制造困难,多少有点(隔壁linux内核直接自带全家桶了就一省心) 并且近年Intel的新U安装显卡驱动和普通声卡驱动都不会出声

低温热源的博客 1万+

nodejs转json数据处理

son格式被越来越多的开发者说青睐,我们常常在接口定义时使用这种格式参数进行数据交换. 今天主要给大家从繁到简的几个node.js下使用的提交 json个数参数的方式方法. 下面示例中出现的参数都做了处理,拷贝代码后需要更改这些参数同时自己写一个接收json格式的api,请求成功后再返回json格式 (一) node.js 原生自带http模块,可以解决基于http协议下的请求及回发

ComeOnZhao的博客 2万+

梯度提升决策树GBDT原理与代码实例讲解

梯度提升决策树GBDT原理与代码实例讲解 1.背景介绍 1.1 机器学习发展历程 机器学习是人工智能领域的一个重要分支,旨在使计算机具备学习和改进自身性能的能力。随着大数据时代的到来,海量的数据为机器学习算法提供了广阔的应用空间。在

AI天才研究院 1088

将JS对象转换为JSON字符串

如果我用以下方法在JS中定义了一个对象: var j={"name":"binchen"}; 如何将对象转换为JSON? 输出字符串应为: '{"name":"binchen"}'

p15097962069的博客 1万+

10、犹豫双模糊TOPSIS算法:原理与实例解析

本文介绍了犹豫双模糊TOPSIS算法的基本原理与应用步骤,结合中国四家纺织公司的案例,详细解析了从构建犹豫双模糊决策矩阵、归一化处理、专家信息聚合,到确定正负理想解、计算距离与相对贴近度系数的完整决策流程。该方法有效应对决策者在评价过程中的犹豫性,适用于财务评估、项目选择等复杂多属性决策场景,具有较强的实用性和推广价值。

yhn45678901的博客 122

Spring AI Alibaba实战训练营-20 基于注解驱动的MCP快速开发入门指南

本文详细讲解如何使用SpringAiAlibaba快速开发基于注解驱动的MCP应用。文章详细介绍了MCP协议并且重点介绍了Spring AI通过注解驱动的开发方式简化MCP服务开发。具体包括服务端和客户端的注解使用、城市最新时间查询MCP项目结构概览(服务端和客户端模块)以及环境配置要求。

program哲学 295

nodejs读写json数据

1.首先准备好要读取的json数据文件如图: 2.创建一个js文件,如图 话不多说,直接上代码吧 //引入文件模块 const fs = require('fs'); //定义json文件路径 const path="./db.json"; //开始读取文件的信息 fs.readFile(path,function(err,data){ if(err){ console.log(err)...

weixin_44198018的博客 4260

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

nodejs中字符串和json转换

代码: // JSON.parse将字符串转换为对象 var data = '{"name": "hxy", "age": "10"}'; console.log(typeof data, typeof JSON.parse(data), JSON.parse(data)); // JSON.stringify将对象转换为字符串 var data2 = {name: "hxy", age: 1...

hxy199421的博客 3582

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NODEJS JSON对象和JSON字符串之间的转换

JSON对象转JSON字符串 var obj = {"a":"1", "b":[{"c":"3"},{"d":"4"}]}; var str = JSON.stringify(obj); JSON字符串转JSON对象 var str = '{&qu

小龙在线 4516

在 Nodejs 中将 Buffer 转换为 JSON 和 Utf8 字符串

Nodejs 和基于浏览器的 JavaScript 有所不同,因为 Node 甚至在 ES6 草案提出 ArrayBuffer 之前就有处理二进制数据的方法。在 Node 中,Buffer 类是大多数 I/O 操作使用的主要数据结构。它是在 V8 堆外部分配的原始二进制数据,一旦分配,就无法调整大小。 在 Node v6.0 之前,要创建新的 Buffer,我们只需使用 new 关键字调用构造函数...

lio-zero 的博客 1519

NodeJS怎么读写一个JSON文件

NodeJS怎么读写一个JSON文件

太阳与星辰的博客 651

nodejs接收表单写入mysql_NodeJS提交表单存数据库(转)

姓名:性别:年龄:手机:$('#ok_btn').on('click',function(){var name = $.trim($('#name').val()),sex = $.trim($('#sex').val()),age = $.trim($('#age').val()),tel = $.trim($('#tel').val()),data = {name : name,sex : s...

weixin_39849153的博客 510

simdjson_nodejs:高性能JSON解析库

simdjson_nodejs:高性能JSON解析库 项目介绍 simdjson_nodejs 是一个为 Node.js 提供的高性能 JSON 解析库,它基于 simdjson 项目,旨在提供比标准 JSON 解析器更快的解析速度。simdjson 是目前最快的 JSON 解析器之一,能够以每秒处理千兆字节的速度解析 JSON 数据。simdjson_nodejs 通过 Node.js 绑定,使...

gitblog_00069的博客 997

nodejs字符串如何转成json数据

var str ='{"a":"1","b":"2"}';var jsonstr =JSON.parse(str);console.log(jsonstr);console.log(jsonstr.a);console.log(jsonstr.b);输出结果:

小北在远方 1万+

nodejs list字符串转json

var liststr="cn=3070091601,ou=BusCatalogGroups,dc=example,dc=com"; // let key='='; // let jsonstr=''; // jsonstr= liststr.replace(new RegExp(key,'g'),'":"'); // key=','; // jsonstr= jsonstr.repla...

1410

nodejs JS对象和JSON字符串之间的转换

1.JSON.stringify将JS对象转化为字符串 var str = JSON.stringify(json); 2.JSON.parse(string)将字符串转化为JSON对象 var json = JSON.parse(string);

刺猬先生 2536
上一篇: NodeJS 服务器实现资源防盗链
下一篇: NodeJS 实现多语言
Panda Shen
博客等级 码龄10年 18粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值