如何在Axios的get请求中添加参数

3

我有一个axios的get请求,在一个vue项目中用于获取mongodb集合中的一项内容

async created() {
    try {
      const res = await axios.get(`http://localhost:3002/backend/gettestbyname`, {
         name: "user language check numbers in different languages"
      })
      this.items = res.data;
      this.imagesref = res.data[0].refimages;
      this.imagestest = res.data[0].testimages;
      this.imagesresult = res.data[0].testresults;
      for (let i of this.imagesref){
        this.expref.push(false);
        this.exptest.push(false);
        this.expres.push(false);
      }
    this.loadAPI=true;
    } catch (error) {
      console.log(error);
    }

这是我的API中的GET请求。

gettestbyname:function(req,res){
    console.log(req.body.name);
    scetest.find({name:req.body.name}).exec(function(err,report){
        if(err){
            res.json({message:'error',status:500,data:null})
        }
        else{
            res.json({message:'report in system',status:200,data:report})
        }
    })
}

当我在Postman中使用原始JSON数据示例测试请求时:{"name": "item的名称"},我可以得到该项,但在我的应用程序中我却得到了一个空的数据数组。我认为我在向axios请求中添加参数的方式上出了一些问题。
编辑经过一些调试,我注意到我的应用程序中get请求被执行了两次。第一次执行给了我正确的结果并且req.body.name作为参数被传递,第二次执行只是执行了没有参数的get请求。我相信我的应用程序仅保存了最后一个请求。这是我在请求中使用console.log记录下来的req.body和结果。
{ name: 'user language check numbers in different languages' }
[
  {
    _id: new ObjectId("624c181587bdfbab1ee80cda"),
    name: 'user language check numbers in different languages',
    tag: '@DHRD-52484',
    status: 'skipped/pending',
    refimages: [],
    testimages: [],
    testresults: [],
    __v: 0
  }
]
{}
[]

你为什么在axios的get请求中使用反引号?你可能需要在JavaScript中转换为JSON... - mahatmanich
你能发布一下你得到的两种返回类型吗,以便更清晰地理解。 - mahatmanich
1个回答

2
您可能需要指定一个content-type头。
const reponse = await axios({
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  data: JSON.stringify({
    name: 'user language check numbers in different languages'
  }),
  url: 'http://localhost:3002/backend/gettestbyname',
})

但它应该可以工作。另外,请确保验证您的输入!也许您为了简洁而删除了它,但请注意。
console.log(req.body.name);
scetest.find({name:req.body.name}).exec(function(err,report){ ... })

name字段需要进行验证,而不是直接从请求体中接受。如果调用方在此处放置一个对象,它可能会以意想不到的方式更改您的查询,绝不能直接将其传递给查询函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接