【解决使用fetch发送json格式的post请求报错问题】_fetch post json-程序员秘密

技术标签: 前端  json  javascript  

解决使用fetch发送json格式的post请求报错问题:

今天,在使用Fetch用法以 POST请求方式的参数传递时,可传输的数据格式有 x-www-form-urlencoded 和 json 两种。以 x-www-form-urlencoded 格式传参时,可以正常得到后台响应的数据,但是 以 json 格式传输时出现报错。先记录解决此问题的过程。


代码:

使用 Fetch 以 json 格式的 post请求代码如下

fetch('http://localhost:3000/books', {
    
      method: 'post',
      body: JSON.stringify({
    
        uname: '张三',
        pwd: '456'
      }), // 请求参数,JSON.stringify() JS 数据对象转换为 JSON 字符串
      headers: {
    
        'Content-Type': 'application/json'
      }
    })
      .then(function (data) {
    
        return data.text();
      }).then(function (data) {
    
        console.log(data)
      });

后台关于解决跨域访问的请求头设置

// 设置允许跨域访问该服务
app.all('*', function (req, res, next) {
    
  res.header("Access-Control-Allow-Origin", "*");  // 允许访问该资源的外域 URL。*允许来自任何域的请求
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header("Access-Control-Allow-Headers", "X-Requested-With"); // 额外的请求头进行声明, 允许客户端向服务器发送X-Requested-With的请求头信息
  res.header('Access-Control-Allow-Headers', 'Content-Type'); // 允许客户端向服务器发送Content-Type的请求头信息
  res.header('Access-Control-Allow-Headers', 'mytoken');
  next();
});
// POST请求接口
app.post('/books', (req, res) => {
    
  res.send('POST请求传递参数!' + req.body.uname + '---' + req.body.pwd)  // body-parser 中间件提供的 body 属性
})

报错提示:

报错图

解决方案:

方案1. 注释掉跨域里请求头设置中有mytoken那一行。

方案2. 把请求头中 Access-Control-Allow-Headers 中的内容合并为一行。

代码如下

  1. 方案1代码:
app.all('*', function (req, res, next) {
    
  res.header("Access-Control-Allow-Origin", "*");  // 允许访问该资源的外域 URL。*允许来自任何域的请求
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header("Access-Control-Allow-Headers", "X-Requested-With"); // 额外的请求头进行声明, 允许客户端向服务器发送X-Requested-With的请求头信息
  res.header('Access-Control-Allow-Headers', 'Content-Type'); // 允许客户端向服务器发送Content-Type的请求头信息
  // res.header('Access-Control-Allow-Headers', 'mytoken');
  next();
});
  1. 方案2代码:
app.all('*', function (req, res, next) {
    
  res.header("Access-Control-Allow-Origin", "*");  // 允许访问该资源的外域 URL。*允许来自任何域的请求
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header("Access-Control-Allow-Headers", "X-Requested-With,Content-Type,mytoken"); // 额外的请求头进行声明, 允许客户端向服务器发送X-Requested-With,Content-Type,mytoken的请求头信息
  next();
});

修改后运行成功

  1. 使用方案1解决后访问成功

修改后运行结果

  1. 使用方案2解决后访问成功

成功

总结:

按照上述方法解决了使用fetch发送json格式的post请求报错问题,但关于为什么以这种方式可以访问成功的原理还没有深入研究,在此仅记录此次解决的方案,在后续的学习中对于原因还需要进行更多的学习。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lt012345/article/details/124530997

智能推荐

SpringBoot - 整合WebSocket及STOMP部分API简介_stomp 单发_九月清晨柳成荫的博客-程序员秘密

WebSocket简介WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。WebSocket是一个消息架构,不强制使用任何特定的消息协议,它依赖于应用层解释消息的含义...

win10 ssh 上传密钥过程,出现 无法将“ssh-copy-id”项识别_Leri_X的博客-程序员秘密

配置过程1. 首先生成密钥对ssh-keygen -t rsa #-t表示类型选项,这里采用rsa加密算法2. 上传公钥ssh-copy-id [email protected]遇到问题在windows10上配置时,会遇到如下错误:ssh-copy-id : 无法将“ssh-copy-id”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。解决方案是在powershell中,先执行以下内容:function ssh-copy-id([string]$.

统计学习方法|逻辑斯蒂原理剖析及实现_GlassySky0816的博客-程序员秘密

https://www.pkudodo.com/2018/12/03/1-6/'''数据集:Mnist训练集数量:60000(实际使用:20000)测试集数量:10000------------------------------运行结果: 正确率:96.9% 运行时长:8.8h备注:对于mnist而言,李航的统计学习方法中有一些关键细节没有阐述,建议先阅读我的个人博客,其中有详细阐述。阅读结束后再看该程序。Blog:www.pkudodo.com'''impor

TestComplete7亮相_TIB的博客-程序员秘密

注:本文最早于2009年5月发表于It168.com   5月,Automated公司的TestComplete7发布了,展现了很多令人激动的新特性,TestComplete7的口号是:The Easiest TestComplete Ever.Script-free testing for new users. Powe

Openlayers + Vue 实现自定义鼠标右键为改变视图角度事件-程序员秘密

Openlayers + Vue 实现自定义鼠标右键为改变视图角度事件效果: 持续按下鼠标右键再拖动鼠标可以实现变换视图的角度(openlayers的样式被我改了一下,看上去有点像ArcGIS API for JS 4.x的样式)关键点Vue里面如何阻止浏览器的默认右键事件如何阻止openlayers自带的鼠标点击拖动地图事件1.Vue里面如何阻止浏览器的默认右键事件这里有一个坑,下面的代码是无效的,不能阻止浏览器的默认右键事件html:...

Data Warehouse Design Considerations _slammer的博客-程序员秘密

Data Warehouse Design Considerations Dave Browning and Joy Mundy Microsoft Corporation December 2001 Applies to:      Microsoft SQL Server 2000 Summary: Data warehousing is one of the more p

随便推点

Linux 下DNS的配置_orapeasant的博客-程序员秘密

Linux 下DNS的配置连续摸了好几天的Bind。当然也有自己不够专注的因素,使得进度一拖再拖。期间也在Bind这个程序中遇到了种种问题,包括配置文件和一些系统权限问题,总是使Named跑不起来或者即使跑起来也没有效用(不能解析)。 为了多多得了解Linux这个系统的服务,光是做些简单的操作是远远不够的,必须要通过熟练和频繁的操作才能感受它的“习惯”和“特点”,才能熟悉它,适

epoll两种类型ET和LT区别(结合实际例子)_epoll lt rt_cws1214的博客-程序员秘密

目前银联采用的方法是LT模式,如果epoll可读(大于某个边沿值),读取需要的数据长度,从epollset中del掉,处理完逻辑之后再加入epollset,如果接收缓冲区仍然有数据,因为是LT模式,会继续通知,重复上述过程(读取需要的长度...)淘米框架则采用ET模式,可读(只通知一次,后面不再通知),则一直读知道EAGAIN,需要处理分包粘包等问题。在一个非阻塞的so

程序员晒工资单,还是大厂香!据说大多数3年,35K还少了?_hello-java-maker的博客-程序员秘密

前几天有个后端程序员的朋友跟我吐槽说,年初立志:今年升职加薪,进阶架构师。结果,疫情之下工作差点没保住。今年大部分的时间也一直在重复着「增删改查」,回顾这一年基本没啥进步,内卷严重啊。...

计算机网络实验报告 三层交换机,网络实验报告 路由器配置_仕識人的博客-程序员秘密

课程名称 计算机网络 实验名称 路由器的配置 姓 名 学 号 专业班级,实验日期 成 绩 指导老师,一、实验目的,1,2,3,4.理解动态路由协议OSPF 的基本特点和分组类型,5.学会在路由器(三层交换机)上查看、分析路由表的方法,二、实验设备,静态路由配置...

Combotree loadFilter事件_jiajundd的博客-程序员秘密

原文章地址$('#seleDepartName').combotree({             url: "../Depart/Test",             method: 'get',             loadFilter: function (rows) {                 return convert(rows);   

在protothreads中实现延时函数_Armauk的博客-程序员秘密

操作系统中一般都有一个延时函数,例如 os_delay(int cunts).在protothreads如何实现和操作系统中的延时函数类似的函数呢。/***************************************************************************///定时到返回0,否则返回1unsigned int delay_

推荐文章

热门文章

相关标签