在节点获取之前将字符串与文件数据进行比较的替代解决方案
Alternative solution to comparing a string with file data before node-fetch
我正在制作一个带有 pokemon 查找命令的 discord 机器人,该命令调用 poke-api 来查找有关 Pokemon 的信息。我没有返回特定错误,我只是在寻找有关如何重新格式化特定部分的指导,因为我是编码新手。
我遇到的主要问题是过滤口袋妖怪名称。
if(!args[0]) return message.reply("Enter a Pokemon name or National dex number.");
if(isNaN(args[0])){
let pokemon = args[0];
pokemon.toLowerCase();
fs.readFile('pokemonlowercase.txt', function read(err, data){
if (err) {
return console.log(err);
}
if(!data.includes(`${pokemon}`)) return message.reply(`${pokemon} is not a valid Pokemon name.`); //Does not filter out gibberish that isnt pokemon names.
fetch(`https://pokeapi.co/api/v2/pokemon/${pokemon}`) //Does this operate before my if statement?
.then(res => res.json())
.then(data => { //lots of defining constants from found api data, and implementing them into a discord embed.
我正在尝试查看文件 pokemonlowercase.txt
以将列出的 Pokemon 名称与输入 pokemon
(或 args[0]
)相匹配。如果使用正确的 Pokemon 名称执行,该命令将正常工作,但如果 Pokemon 名称是一堆乱码,则 returns 会出现 api 错误。
从本质上讲,该机器人忽略了 pokemon
与 pokemonlowercase.txt
内所有 893 个神奇宝贝名称之间的比较。
我正在使用 node-fetch 获取 api 的信息。
我是否需要使用异步延迟 .fetch 或者参数 !data.includes
是一个不正确的使用场景?我知道 .fetch 是一个承诺,但没有提到它先行。
有关更多上下文,完整的命令代码在这里:
https://sourceb.in/Z0qKSGNPw7
您可以使用名为“axios”的库,这是一个基于承诺的库。
我设法在不使用 pokemon.txt
文件的情况下让它工作。
const axios = require("axios");
// pokemon command
if (command === "pokemon") {
if (!args.length >= 1)
return message.channel.send("Enter a Pokemon name or National dex number.");
// request to API
axios
.get(`https://pokeapi.co/api/v2/pokemon/${args[0].toLowerCase()}`)
.then((data) => data.data)
.then((data) => {
// pokemon exists, do something with your data
console.log(data);
})
.catch((err) => {
if (err.response.status === 404) {
// Pokemon doesn't exist
message.channel.send("That's not a pokemon chief");
} else {
// Error
console.error(err);
}
});
}
PokeAPI returns 如果宠物小精灵不存在,状态为 404,这意味着一旦您请求,您可以检查状态是否为 404 类型,如果是,则宠物小精灵不存在那么口袋妖怪不存在(或发生错误)
我正在制作一个带有 pokemon 查找命令的 discord 机器人,该命令调用 poke-api 来查找有关 Pokemon 的信息。我没有返回特定错误,我只是在寻找有关如何重新格式化特定部分的指导,因为我是编码新手。 我遇到的主要问题是过滤口袋妖怪名称。
if(!args[0]) return message.reply("Enter a Pokemon name or National dex number.");
if(isNaN(args[0])){
let pokemon = args[0];
pokemon.toLowerCase();
fs.readFile('pokemonlowercase.txt', function read(err, data){
if (err) {
return console.log(err);
}
if(!data.includes(`${pokemon}`)) return message.reply(`${pokemon} is not a valid Pokemon name.`); //Does not filter out gibberish that isnt pokemon names.
fetch(`https://pokeapi.co/api/v2/pokemon/${pokemon}`) //Does this operate before my if statement?
.then(res => res.json())
.then(data => { //lots of defining constants from found api data, and implementing them into a discord embed.
我正在尝试查看文件 pokemonlowercase.txt
以将列出的 Pokemon 名称与输入 pokemon
(或 args[0]
)相匹配。如果使用正确的 Pokemon 名称执行,该命令将正常工作,但如果 Pokemon 名称是一堆乱码,则 returns 会出现 api 错误。
从本质上讲,该机器人忽略了 pokemon
与 pokemonlowercase.txt
内所有 893 个神奇宝贝名称之间的比较。
我正在使用 node-fetch 获取 api 的信息。
我是否需要使用异步延迟 .fetch 或者参数 !data.includes
是一个不正确的使用场景?我知道 .fetch 是一个承诺,但没有提到它先行。
有关更多上下文,完整的命令代码在这里: https://sourceb.in/Z0qKSGNPw7
您可以使用名为“axios”的库,这是一个基于承诺的库。
我设法在不使用 pokemon.txt
文件的情况下让它工作。
const axios = require("axios");
// pokemon command
if (command === "pokemon") {
if (!args.length >= 1)
return message.channel.send("Enter a Pokemon name or National dex number.");
// request to API
axios
.get(`https://pokeapi.co/api/v2/pokemon/${args[0].toLowerCase()}`)
.then((data) => data.data)
.then((data) => {
// pokemon exists, do something with your data
console.log(data);
})
.catch((err) => {
if (err.response.status === 404) {
// Pokemon doesn't exist
message.channel.send("That's not a pokemon chief");
} else {
// Error
console.error(err);
}
});
}
PokeAPI returns 如果宠物小精灵不存在,状态为 404,这意味着一旦您请求,您可以检查状态是否为 404 类型,如果是,则宠物小精灵不存在那么口袋妖怪不存在(或发生错误)