Как настроить REST API для Node JS - PullRequest
1 голос
/ 30 апреля 2020

Я новичок в REST API, и я пытался настроить его и работать на разногласия. js в течение достаточно долгого времени, и я просто не могу понять, как заставить это работать. Любая помощь будет принята с благодарностью.

текущий код выдает ошибку FetchError: invalid json response body at https://api.psychonautwiki.org/?=%7B%20%20substances%20%7B%20%20%20name%20%20%20%20effects%20%7B%20%20%20%20%20%20name%20%20%20%20%7D%20%20%7D%7D reason: Unexpected token G in JSON at position 0

вот основной код:


const Discord = require('discord.js');
const fetch = require('node-fetch');
const querystring = require('querystring');

    module.exports.execute = async(message, args) => {

        const query = querystring.stringify({ term: args.join(' ') });

        if (!args.length) {
            return message.channel.send('You need to supply a search term!');
        }

        const { list } = await fetch(`https://api.psychonautwiki.org/?={  substances {   name    effects {      name    }  }}`).then(response => response.json());
        if (!list) return message.reply('no');

        message.channel.send(list);
    }

Настройка API:

    substances(limit:300) {
        name
        url
        summary
        featured
        addictionPotential
        crossTolerance
        dangerousInteraction {
            name
        }
        class {
            chemical
            psychoactive
        }
        tolerance {
            full
            half
            zero
        }
        effects {
            name
            url
        }
    }
}

1 Ответ

0 голосов
/ 30 апреля 2020

при использовании fecth вам нужно указать чуть больше

  • помните, что это GraphQL, для запроса вам нужно использовать POST вместо GET
  • вам также нужно убедиться, что вы передаете тип содержимого
  • , а затем вам необходимо отправить параметр query в теле, и, поскольку он fetch, вам необходимо преобразовать в строку

, поэтому полный запрос будет выглядеть следующим образом:

fetch('https://api.psychonautwiki.org', { 
  method: 'POST', 
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ 
    query: "{ substances { name effects { name } }}"
  })
})
.then(res => res.json())
.then(json => console.log(json))

и вернет:

{
  "data": {
    "substances": [
      {
        "name": "1,4-Butanediol",
        "effects": [
          {
            "name": "Empathy, affection and sociability enhancement"
          }, 
          ...
      },
      ...
    ]
  }
}

, который вы даже можете запустить в консоли браузера:

enter image description here


добавлено

Вот замечательный ресурс по , как запрашивать GraphQL API

...