NodeJS中使用Unirest传递URL多查询参数的方法求助
解决Unirest在Node.js中传递GET请求查询参数的问题
嘿,我来帮你搞定这个Unirest传递查询参数的问题!你之前踩的坑主要是用错了Unirest的方法,我来逐个解释问题所在,再给你正确的写法。
先说说你之前方案的问题
- 方案1:Unirest里根本没有
queryString这个方法,官方用来添加查询参数的是.query(),所以你才会遇到queryString is not a function的错误。 - 方案2:
routeParam是用来处理路径参数的(比如URL是/Api/learner/courses/:courseId这种带占位符的路径),而你要的是URL末尾的查询参数(?pageNumber=1&sortDirection=ASC这种),完全不是一个东西,所以这个方法用在这里不对。 - 方案3:
.send()是用来发送POST/PUT等请求的请求体数据的,GET请求通常不会携带请求体,大部分服务器收到带body的GET请求会直接报错,这就是你拿到500响应的原因,而且URL里的{pageNumber}写法也不符合查询参数的规则。
正确的两种写法
写法1:逐个添加查询参数
用.query()方法逐个传入键值对,Unirest会自动帮你拼接成URL末尾的查询参数:
unirest('GET', 'https://my-domain.com/Api/learner/courses') .header({ "content-type": "application/json", "authorization": token }) .query("pageNumber", "1") .query("sortDirection", "ASC") .query("status", "all") .end(function (response) { response.status.should.be.equal(200); });
写法2:传入参数对象
如果参数多的话,直接传一个对象更方便,.query()会自动解析成查询字符串:
const params = { pageNumber: 1, sortDirection: "ASC", status: "all" }; unirest('GET', 'https://my-domain.com/Api/learner/courses') .header({ "content-type": "application/json", "authorization": token }) .query(params) .end(function (response) { response.status.should.be.equal(200); });
这两种写法最终都会生成类似https://my-domain.com/Api/learner/courses?pageNumber=1&sortDirection=ASC&status=all的请求URL,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Asad
相关产品推荐
相关产品推荐

