(node js) graphql API поиск по запросу - PullRequest
0 голосов
/ 06 мая 2020

Я уже довольно давно работал над этой командой API graphql для моего бота Discord, и, наконец, он собирает необходимую мне информацию с сайта. Я не могу понять, как уточнить поиск до отдельного запроса / аргумента, а не отображать всю информацию из API.

Код:

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

module.exports = {
    name: 'dose',
    definition: 'find info on drugs',
  },
  module.exports.execute = async(message, args) => {

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

    let bruh;

    fetch('https://api.psychonautwiki.org', {

      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        //query: "{ substances { name effects dose { name }  }}}"

        //query: "{substances(offset:0, limit:10) {name effects {name}}}"
        query: "query substances ($effect: String, $query: String, $chemicalClass: String, $psychoactiveClass: String, $limit: Int, $offset: Int) {\n    substances (effect: $effect, query: $query, chemicalClass: $chemicalClass, psychoactiveClass: $psychoactiveClass, limit: $limit, offset: $offset) {\n        name\n        url\n          featured\n        summary\n        addictionPotential\n        toxicity\n        crossTolerances\n    }\n}",
        variables: {
          "effect": "",
          "query": "",
          "chemicalClass": "",
          "psychoactiveClass": "",
          "limit": 4,
          "offset": 0
        },
        other: '{"query":"query effects_by_substance ($substance: String, $limit: Int, $offset: Int) {\n    effects_by_substance (substance: $substance, limit: $limit, offset: $offset) {\n        name\n        url\n   limit\n    offset\n }\n}","variables":{"substance":"","limit":0,"offset":0}}'
      })
    }).then(res => res.json()).then(json => {
      console.log(JSON.stringify(json.data, null, 4));
      message.channel.send("```" + JSON.stringify(json.data, null, 4) + "```");

      let info = json.data + json.extensions;

    });

  }

1 Ответ

0 голосов
/ 06 мая 2020

Вы можете передать json.data и l oop через него, используя forEach(), тогда, если вы хотите указать только c части данных, вы можете добавить операторы if. Я бы также посоветовал поместить все во вставку, чтобы она выглядела лучше.

Если вы хотите использовать все данные:

const embed = new MessageEmbed()

json.data.forEach((data, value) => {
embed.addField(data, value)
})

message.channel.send(embed)

Или, если вы хотите получить спецификацию c части:

const embed = new MessageEmbed()

json.data.forEach((data, value) => {
if (data === 'chemicalClass') embed.addField(data, value)
if (data === 'psychoactiveClass') embed.addField(data, value)
})

message.channel.send(embed)
...