Node.js中GET请求如何传递多个参数?含数组参数写法验证
在Node.js中用request模块传递数组参数的正确姿势
先聊聊你最开始的写法哈:
var myJsonString = JSON.stringify(url); request.get('http://localhost:8090/saveURL/'+myJsonString, function(req, res,body) { console.log(body); })
这种方式其实不太靠谱——直接把JSON字符串硬拼在URL路径里,很容易踩坑:比如URL有长度上限,数组内容多了直接就请求失败;而且JSON里的特殊字符(像/、?这类)会打乱URL的结构,后端根本没法正确解析你的参数。
再看你修改后的代码:
request.get({ url: 'http://localhost:8090/saveURL/', qs: { param1: JSON.stringify(url)} }, function(req, res,body) { console.log(req); console.log(body); } )
这个写法完全正确!
为啥这个写法没问题?
request模块的qs选项就是专门用来处理查询参数的,它会自动帮你对参数值做URL编码,不用担心特殊字符搞砸URL。把数组转成JSON字符串传过去,后端只要解析这个字符串就能还原出原数组,逻辑很顺畅。
给你几个额外的小建议:
- 后端解析要对应:比如用Express的话,后端得把
param1的值做JSON解析才能拿到数组:app.get('/saveURL', (req, res) => { try { const urlArray = JSON.parse(req.query.param1); // 这里写你的数组处理逻辑 res.status(200).send('处理成功'); } catch (err) { res.status(400).send('参数格式错误'); } }); - 简单数组可以更省事:如果你的数组里都是字符串、数字这种简单类型,其实不用转JSON,直接把数组传给
qs就行。request会自动把它转成符合URL规范的格式(比如param1=val1¶m1=val2),后端Express能直接通过req.query.param1拿到数组,省掉JSON解析的步骤:request.get({ url: 'http://localhost:8090/saveURL/', qs: { param1: url } // url是你的原数组 }, function(err, res, body) { // 注意这里回调第一个参数是err,不是req,你之前写错啦 if (err) { console.error('请求出错:', err); return; } console.log(body); }); - 回调参数别搞混:request的回调参数顺序是
(err, res, body),你之前写的第一个参数是req,其实那是错误对象,建议改过来,不然调试的时候容易懵~
内容的提问来源于stack exchange,提问作者pepe
相关产品推荐
相关产品推荐

