通过Node.js访问API

时间:2020-01-11 07:26:16

标签: node.js api

使用劳工统计局提供的示例Python代码,我能够成功访问其API,并在控制台中打印包含数据系列的JSON。下面的Python代码:

#BLS query.
headers = {'Content-type': 'application/json'}
data = json.dumps({"seriesid": ['CES0000000001'],"startyear":"2010", "endyear":"2019"})
result = requests.post('https://api.bls.gov/publicAPI/v2/timeseries/data/', data=data, headers=headers)
print(result.text)

虽然Python代码可以正常工作,但是我更喜欢使用JS,但这样做没有成功。我尝试使用访存,但未取得任何进展。请参见下面的JS代码:

fetch('https://api.bls.gov/publicAPI/v2/timeseries/data/', {
        method: 'POST',
        headers: {
            'Content-type': 'application/json'
        },
        body: JSON.stringify({seriesid: ['CES0000000001'], startyear:"2010", endyear:"2019"})
    }) 
    .then(function(response) {response.json()}) 
    .then(function(json) {console.log(json)});

我确定我在这里弄乱了一些简单的东西,但是我很茫然。任何帮助将不胜感激。作为参考,可以在以下链接中找到BLS有关其API的其他信息:

https://www.bls.gov/developers/api_signature_v2.htm

2 个答案:

答案 0 :(得分:0)

如果要在Node.js中使用常规JavaScript的提取功能,将无法正常工作,其原因之一是,NodeJ不能通过浏览器发出请求,但是Fetch API是通过浏览器发出请求的

您必须使用名为node-fetch的程序包,就像常规提取一样,但是对于NodeJ。

您可以在这里获得它-> https://www.npmjs.com/package/node-fetch

或者您也可以使用标准的NodeJS HTTP包。

axiosrequest之类的程序包在NodeJS中发出HTTP请求

答案 1 :(得分:0)

尝试使用

const data = {用户名:'example'};

fetch('https://api.bls.gov/publicAPI/v2/timeseries/data', {
  method: 'POST', // or 'PUT'
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(data),
})
.then((response) => response.json())
.then((data) => {
  console.log('Success:', data);
})
.catch((error) => {
  console.error('Error:', error);
});

但是我认为真正的问题可能是您正在使用已使用身份验证的API,因此请确保您将api密钥与post req本身一起使用。

如果您可以获取api文档,请参考该文档并查看如何向服务器发出经过身份验证的请求。

相关问题