Позвольте мне начать с того, что я довольно новичок в программировании, поэтому я не удивлюсь, если сделаю очень простую и небрежную ошибку. В настоящее время я изучаю 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