Reputation: 403
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:
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);
}
});
Upvotes: 1
Views: 3489
Reputation: 6718
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());
Upvotes: 1