1

I have been following the REST API guide from Discord.js, but I keep getting errors that the first property of the returning json cannot be read. I know that the api address is correct.

This is what the response looks like: response

And here is my code:

index.js

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

const { prefix, token, api } = require('./config.json');

const client = new Discord.Client();

const trim = (str, max) => (str.length > max ? `${str.slice(0, max - 3)}...` : str);

client.once('ready', () => {
    console.log('Ready!');
});

client.on('message', async message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;

    const args = message.content.slice(prefix.length).split(/ +/);
    const command = args.shift().toLowerCase();

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

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

        const { body } = await fetch(`${api}search.php?${query}&platform=uplay`)
            .then(response => response.json());         

        if (!body.results.length) {
            return message.channel.send(`No results found for **${args.join(' ')}**.`);
        }

        const [answer] = body.results;

        const embed = new Discord.RichEmbed()
            .setColor('#EFFF00')
            .setTitle(answer.name)
            .addField('Platform', trim(answer.platform, 1024))
            .addField('Kills PvE', trim(answer.kills_npc, 1024));


        message.channel.send(embed);
    }
});
Zoef
  • 393
  • 2
  • 6
  • 18

1 Answers1

1

Your response json image does not have body property. So when do the destructuring assignment, there's no corresponding body in the response to assign to. So body is undefined.

Change your destructuring to:

const { results } = await fetch(`${api}search.php?${query}&platform=uplay`)
  .then(response => response.json());
// results is array from the response

Or simply; don't destructure (and you can leave the rest of the code as it is):

const body = await fetch(`${api}search.php?${query}&platform=uplay`)
  .then(response => response.json());
1565986223
  • 6,420
  • 2
  • 20
  • 33