浅尝node-记一次vue结合axios参数提交问题

写在前面

闲来无事,最近使用vue全家桶结合nodejs搭建了一个简单的网站,在前端使用的axios做请求,后端框架使用express框架,在前端做数据请求时,因为axios默认的使用multipart/form-data编码方式进行参数提交,一般默认来说,post请求不涉及到文件上传一般都是使用的x-www-form-urlencoded编码方式进行参数提交,然后...噩梦开始了...
(ps:觉得比较啰嗦的可直接看结论,哈哈^_^)

问题还原

因为axios默认使用multipart/form-data编码方式,因此我们需要在请求头中添加一行代码:

'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'

此时在服务器端接收参数时,发现使用req.body无法获取参数(默认已经使用中间件解析参数):

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

百度后发现,需要使用qs中间件将axios 请求参数序列化,也就是使用如下代码:

if (config.method === 'post') {
    config.data = qs.stringify(config.data)
  }

现在服务器端能够正常的接收到数据,并且存入数据库,本以为这样就完了...
(补充一句:如果上传的vey/value,value值不是对象,而是单个的string或者number等,服务器端是可以正常接收到参数,也就是说可以使用req.body.key取到数据的。只有是对象,数组等类型,默认也是字符串,并且key/value都是字符串,因此想使用req.body.key是不行的)
因结构需要,有两个参数需上传对象,并且存入数据库中,首先,前端上传参数如图1所示:


图1 上传参数

刚开始测试的时候使用的apizza插件进行服务器端调试,发现上传参数没问题(并未做存入数据库处理),后使用前后端联调方式进行,发现前端上传的数据格式如图2所示:


图2 上传参数

我们可以看到,此时links是单引号,当时并未想到是字符串,因为第一次使用axios,也为后面的踩坑埋下伏笔...
通过观察存入数据库中的数据发现,links字段并未存入数据库,因为前面使用插件调通的,因此并未多想,monoose数据模型如图3所示:
图3 结构模型

分析原因

开始以为是存入对象需要将模型中的links字段更改为Miexd类型数据,但是发现没用,然后花了两天时间,查各种文档,一直将问题定位在了数据库存储类型上....
结果今天早上起床后继续调试,终于发现哪里不对,图2的links字段,好像有个单引号,突然反应过来,这不就是字符串吗?立马对比插件和axios发出去的请求,发现插件请求可以获取到,而axios请求却获取不到?忽然想起来,前端有一句:

需要使用qs中间件将axios 请求参数序列化
结果看代码是:

qs.stringify(config.data)

这个和

JSON.stringify()

何其相识~~~
与之对应的肯定需要:

qs.parse()

结果在服务器端加入了这样一段代码后:

var req = qs.parse(req.body);

就能正常解析上传的参数。。。自此问题解决。。。。

结论

在使用axios进行请求时候请注意以下几点:
1.axios默认使用的编码方式为:multipart/form-data,如需使用x-www-form-urlencoded编码方式,请使用qs中间件将参数序列化。(如不序列化,服务器端无法获取到上传的参数)
2.服务器端我是采用的nodejs,此时需要将qs序列化后的参数反序列化,将其转化为JSON格式。

后记

俗话说,有得必有失。。。虽然调BUG调的有待难受,但是,收获也很多...

造成这次BUG有多方面原因:

1.自己不熟悉axios框架。
2.较粗心,一直未曾发觉上传的参数是字符串。
3.mongoose使用的不熟悉(一直以为是数据库存储的原因,数据模型建立的有问题。。。)

收获:

1.通过这个BUG,重新翻阅了mongoose的相关操作,对mongoose理解加深。
2.重新翻阅了http相关的知识点,了解简单的http请求头的信息,以及基本原理。
3.重新了解了一遍axios的API请求,进一步熟悉axios的请求。

ps:

以上内容仅为自己的学习过程,欢迎大家取其精华,丢其糟粕。若对以上内容有不同简介或看法,欢迎一起探讨。
企鹅号:1041415167 邮箱地址:zth1041415167@outlook.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容