Нужна помощь с топором ios и module.exports - PullRequest
0 голосов
/ 22 апреля 2020

Позвольте мне начать с того, что я довольно новичок в программировании, поэтому я не удивлюсь, если сделаю очень простую и небрежную ошибку. В настоящее время я изучаю module.exports и ax ios, поэтому я играю с ними, пытаясь создать простой веб-сайт, который использует оба одновременно, чтобы помочь мне полностью понять их (я уверен, что есть гораздо более чистый способ go об этом). HTTP-запросы, основанные на обещаниях, являются для меня совершенно новыми, так как курс, который я изучаю, учит устаревшему пакету запросов, поэтому я подумал, что лучше узнать что-то еще; топор ios кажется именно то, что мне нужно. Примечание: если у кого-то есть хорошие, легко усваиваемые учебные ресурсы о том, как именно работают обещанные запросы, а также о том, как включить в них функции асинхронного / ожидающего выполнения, отправьте это мне!

В любом случае, у меня есть следующее модуль с именем potterAPI. js, который извлекает эффект случайного заклинания с веб-сайта API Potter с помощью ax ios (у меня есть ключ API, определенный с префиксом «? key =», я просто не включил его; также подтвердил, что он работает с Почтальоном, поэтому никаких проблем нет):

const axios = require("axios");

module.exports.getSpellEffect = () => {

  let spellEffectList = [];

  axios
    .get("https://www.potterapi.com/v1/spells" + apiKey)

    .then(function(res) {
      res.data.forEach(element =>
        spellEffectList.push(element.effect));
    })

    .catch(function(err) {
      console.error(err);
    });

  for (var i = 0; i < spellEffectList.length; i++) {
    let randomNumber = Math.floor(Math.random() * spellEffectList.length);
    var randomSpellEffect = spellEffectList[randomNumber];
  }

  return randomSpellEffect;

}

Здесь что-то определенно не работает должным образом, так как я попытался консольной регистрацией массива spellEffectList, и он все еще пуст в конце модуля , Я думаю, что делаю грубую ошибку, связанную с областью действия, но я не могу понять это.

Если это поможет, вот фрагмент JSON, который возвращается из API Поттера:

data: [
    {
        "_id": "5b74ebd5fb6fc0739646754c",
        "spell": "Aberto",
        "type": "Charm",
        "effect": "opens objects"
    },
    {
        "_id": "5b74ecfa3228320021ab622b",
        "spell": "Accio",
        "type": "Charm",
        "effect": "Summons an object",
        "__v": 0
    },
    {
        "_id": "5b74ed2f3228320021ab622c",
        "spell": "Age Line",
        "type": "Enchantment",
        "effect": "Hides things from younger people",
        "__v": 0
    },

Затем я пытаюсь передать эту случайную строку заклинания обратно в мое приложение. js, где я собираюсь отправить ее в свой файл index.e js:

const express = require("express");
const ejs = require("ejs");
const bodyParser = require("body-parser");
const spells = require(__dirname + "/potterAPI.js")

const app = express();

app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));

app.get("/", function(req, res) {
  let spellEffect = spells.getSpellEffect();
  res.render("index", {spellEffect: spellEffect});
});

app.listen(3000, function(req, res) {
  console.log("Server up and running on port 3000");
});

index.e js фрагмент:

    <div class="question">
      <h2>Choose the spell that does the following...</h2>
      <h3> <%= spellEffect %> </h3>
    </div>

Я не получаю никаких ошибок при загрузке сервера и загрузке локального хоста, но, очевидно, случайное заклинание не отображается где я не хочу.

Если бы кто-то мог просмотреть мой код, чтобы увидеть, где я делаю ошибку, это было бы очень признательно! Если вам нужна дополнительная информация для диагностики проблемы, не стесняйтесь сообщить мне.

Заранее спасибо!

-Seth

...