React JS - 如何将变量(参数)传递给API URL?

时间:2018-05-19 04:10:30

标签: json reactjs api url-parameters

我有一个由两个下拉列表组件组成的页面;只有在成功验证(有效令牌)后才能访问该页面。下拉列表都会使用来自不同JSON-API的数据。我有一个下拉列表功能,但另一个,它的API的URL需要参数。

示例网址http://buildingsAPI:111/api/buildings/

通过附加了ID的邮递员进行测试http://buildingsAPI:111/api/buildings/abcde-abce-abc2-111-2222

示例Json:

[
    {
        "abc_buildingid": "1111-2222-3333-aaa-1111117",
        "abc_energyprogramid": "abcde-abce-abc2-111-2222",
        "siteName": "Building 1",
        "Available": false,
        "clientName": "Client 1"
    },
    {
        "abc_buildingid": "222-2222-3333-aaa-1111117",
        "abc_energyprogramid": "xyz11-abce-abc2-111-2222",
        "siteName": "Building 2",
        "Available": false,
        "clientName": "Client 2"
    },
]

...我已经在用户身份验证(localStorage)时获取令牌,但我还需要将abc_energyprogramid作为参数追加/传递给API URL。

... 代码

     constructor(props) {
      super(props);

      this.getToken = this.getToken.bind(this);
    }


componentDidMount() {
    const bearerToken = this.getToken();

    fetch('http://buildingsAPI:111/api/buildings/?myparam1={abc_energyprogramid}', {
     method: 'GET',
     headers: {
                'Content-type': 'application/json',
                'Authorization': `Bearer ${bearerToken}`
              },
        })
        .then(results => results.json())
        .then(buildings => this.setState({ buildings: buildings }))
      }

    getToken() {
        return localStorage.getItem('id_token');
    }

    render() {
        console.log(this.state.buildings);
        return(
            <div>
            <select className="custom-select" id="siteName">
                    { this.state.buildings.map(item =>(
                    <option key={item.siteName}>{item.siteName}</option>
                    ))
                    }
                </select>
            </div>
        );
    }

...我目前收到错误:&#34;未处理的拒绝(SyntaxError):JSON输入的意外结束&#34;在这行代码:.then(results =&gt; results.json())。我能得到一些帮助吗?

1 个答案:

答案 0 :(得分:5)

我认为问题在于您引用abc_energyprogramid

的方式

改变这个:

fetch('http://buildingsAPI:111/api/buildings/?myparam1={abc_energyprogramid}')

为:

fetch(`http://buildingsAPI:111/api/buildings/?myparam1=${abc_energyprogramid}`)

注意反向标记和ES6模板字符串文字。