Я пытаюсь получить некоторые данные из API и сохранить их в моей базе данных MongoDB, вот мой код:
const request = require("request");
const Vege = require("./models/Vege");
request(
"https://data.taipei/api/v1/dataset/f4f80730-df59-44f9-bfb8-32c136b1ae68?scope=resourceAquire&limit=1",
{ json: true },
(err, res, body) => {
if (err) return console.log(err);
let data = body.result.results; // an array of objects
data.forEach(vege => {
let trimmed = JSON.parse(
JSON.stringify(vege).replace(/"\s+|\s+"/g, '"')
); // just removing spaces
const newVege = new Vege({
品名: trimmed.品名,
市場: trimmed.市場,
"平均(元 / 公斤)": trimmed["平均(元 / 公斤)"],
種類: trimmed.種類,
日期: trimmed.日期,
});
console.log(newVege); // I do see the object I want to save in the console
newVege.save(err => console.log(err)) // "Cannot read property 'then' of undefined"
.then(() => console.log("Saved successfully"));
})
}
);
Когда я выполняю .save () для моего объекта newVege а затем проверьте коллекцию атласа mongodb, его там нет, и в сообщении об ошибке говорится: «Не удается прочитать свойство 'then' of undefined», что меня сбивает с толку, потому что, когда я console.log newVege, это именно то, что я хотел. Не знаю, почему это не определено и почему не сохраняется. Я благодарен за любую помощь!
---- Обновление ----
Я вроде как исправил проблему с не сохранением данных, переместив приведенный выше код в маршрут «/», теперь код выглядит так:
app.get("/", (req, res) => {
request(
"https://data.taipei/api/v1/dataset/f4f80730-df59-44f9-bfb8-32c136b1ae68?scope=resourceAquire&limit=1",
{ json: true },
(err, res, body) => {
if (err) return console.log(err);
let data = body.result.results;
for (const vege of data) {
let trimmed = JSON.parse(
JSON.stringify(vege).replace(/"\s+|\s+"/g, '"')
);
const newVege = new Vege({
品名: trimmed.品名,
市場: trimmed.市場,
"平均(元 / 公斤)": trimmed["平均(元 / 公斤)"],
種類: trimmed.種類,
日期: trimmed.日期,
});
newVege
.save()
.then((vege) => console.log(vege))
.catch((err) => res.status(400).json(err));
};
}
);
});
Но тогда у меня возникла новая проблема: когда я тестирую ее с помощью Postman, запрос не останавливается (продолжайте повторять отправку запросов и продолжайте загрузку). Если я нажму «Отмена» и проверил свою базу данных, я действительно увижу сохраненные данные. Есть идеи, почему он продолжает отправлять запросы?