Как получить данные и статус ответа из API, используя node-fetch?
В соответствии с документацией node-fetch
мы можем получить статус ответа, как это
fetch('https://github.com/')
.then(res => {
console.log(res.status);
});
и для получения данных
fetch('https://api.github.com/users/github')
.then(res => res.json())
.then(jsonData => console.log(jsonData));
У меня есть сценарий, в котором мне нужно вернуть данные JSON и статус из ответа. Я пытался использовать как это
fetch('https://api.github.com/users/github')
.then(res => res.json())
.then(jsonData => {
console.log(jsonData);
console.log(jsonData.status);
});
но
console.log(jsonData.status)
не вернет статус. Как я могу получить статус и выходные данные
4 ответа
Самым простым решением было бы объявить переменную и присвоить ей значение res.status:
let status;
fetch('https://api.github.com/users/github')
.then((res) => {
status = res.status;
return res.json()
})
.then((jsonData) => {
console.log(jsonData);
console.log(status);
})
.catch((err) => {
// handle error for example
// console.error(err);
});
Вы также можете попробовать это таким образом, используя async/await
:
retrieveStatusAndJson = async (url) => {
try {
const res = await fetch(url);
const resJson = await res.json();
} catch (err) {
// handle error for example:
// console.error(err);
}
const { status } = res;
console.log(status);
console.log(resJson);
}
Затем Вы можете использовать его с любым URL, который Вы хотите:
retrieveStatusAndJson('https://api.github.com/users/github')
Другое альтернативное решение использует Promise.all
fetch('https://api.github.com/users/github')
.then(res => Promise.all([res.status, res.json()]))
.then(([status, jsonData]) => {
console.log(jsonData);
console.log(status);
});
Надеюсь, поможет
Я мог бы пойти в противоположном направлении, однако я бы посоветовал вам использовать requestJs, так как его сообщество намного больше, чем выборка узлов и предоставляет множество функциональных возможностей.
С requestJs вы можете получить statusCode как
request("https://api.github.com/users/github", (err, res, body) => {
let statusCode = res.statusCode;
});
RequestJs также предоставляет множество простых способов вызова различных методов API, а также позволяет легко наблюдать запрос API и ответ API.
Вот еще один вариант, использующий асинхронные лямбда-функции и деструктуризацию массива:
fetch('https://api.github.com/users/github')
.then(async (res) => {
return [await res.json(), res.status];
})
.then(([jsonData, status]) => {
console.log(jsonData);
console.log(status);
})
.catch((err) => {
// handle error
console.error(err);
});