【问题标题】:Boolean params in Axios get request automatically getting converted to string in server sideAxios 中的布尔参数获取请求自动在服务器端转换为字符串
【发布时间】:2021-02-25 15:28:15
【问题描述】:

我有一个 json 对象,我将其作为参数传递给 axios get api。这是 Json 对象

obj = {
  name: "device"
  value: true,
}

我正在使用上述对象调用 axios get 请求,如下所示 -

  tableFilter = (obj) => {
    console.log(typeof obj.value);
    axios
      .get("http://localhost:3200/getFilter/", { params: obj })
      .then((res) => {
        console.log(res.data);
      });
  };

在上面的代码中,'obj.value' 的类型在控制台中显示为 'boolean'。现在我像这样在服务器端处理这个请求-

Router.get("/getFilter", async (req, res) => {
  console.log(typeof req.query.value);
      dbase.collection("employee").find(
          { [req.query.filter]: req.query.value },
          { projection: { _id: 0 } })
        .toArray().then((result) => {
          console.log(result);
        });
  }
});

'Router' 是快速路由器对象,'dbase' 是我的数据库的 mongoclient 对象(它们与我的问题无关)。在上面的代码中,如果我控制对象“值”键,它会将类型显示为“字符串”。为什么布尔值会自动转换为字符串? 我需要根据字段“设备:真”查询mongodb文档所以我需要布尔值而不是字符串。

【问题讨论】:

    标签: javascript node.js reactjs axios mongodb-query


    【解决方案1】:

    axios在使用get时会将参数放在URL中,所以会以文本的形式传递给服务器。 你可以(在服务器端):

    • 检查参数是否存在,如果不存在则假定值为布尔值false(注意,另一方面,它的存在并不意味着它是布尔值true
    • 如果存在,请检查参数value 的值是否为字符串"true"(最好先将其小写,以避免因大小写差异而产生任何恶作剧。 -> 如果是,则假定为布尔值true。 -> 如果是别的,假设布尔值false

    【讨论】:

    • 如何查看网址?只是为了知识。有没有办法通过axios的get请求传递一个布尔值?
    • 您的网址将如下所示:http://localhost:3200/getFilter/?name=device&value=true。不太确定你可以在哪里看到它(我没有像你那样编写服务器端代码),但我最好的猜测是它将成为 req.query 对象的一部分。
    【解决方案2】:

    您不能在 axios.get() 中添加对象或数据。它只需要 URL; 如果要通过 axios 在 get 请求中发送数据,则必须将它们添加为查询参数。 您的网址应如下所示:

    axios.get("http://localhost:3200/getFilter/?name="+name+"&value="+value)
    //here name and values are const added dynalically
    

    【讨论】:

    • 我可以通过 get 发送对象。在上面的代码中,'req.query' 有我的对象。但是该对象有一个布尔值,我需要在服务器端访问它。但我只能以字符串格式访问它。所以就像托尼说的那样,不可能将布尔值发送到服务器吗?
    • @dharanikumar 是的,无论您通过查询参数发送什么,它总是作为字符串传递。因此,当您传递 value=true 时,它​​实际上被服务器接收为 value="true"。但是,我不认为这应该是您的代码中的问题。只需将其作为字符串值检查为 if(value==='true') 。 :)
    【解决方案3】:

    尝试在客户端对负载进行 JSON 编码,然后在服务器上对请求负载进行 JSON 解码。它将保留布尔值,因此您不会看到布尔值变成字符串“1”或“true”。

    【讨论】:

      猜你喜欢
      • 2020-05-10
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2015-02-23
      • 1970-01-01
      • 2014-04-20
      相关资源
      最近更新 更多