首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将来自外部API的数据植入mongodb?

如何将来自外部API的数据植入mongodb?
EN

Stack Overflow用户
提问于 2018-07-25 12:32:26
回答 1查看 1.1K关注 0票数 1

我正在努力学习NodeJS。我使用的是mongoose & mLab。我对这些技术中的每一项都不熟悉。

我现在的模型是这样的。稍后,我将向模式中添加一些内容。

代码语言:javascript
复制
const mongoose = require("mongoose");
const fetchData = require("../seed");

const schema = mongoose.Schema;

const dataSchema = new Schema({});

module.exports = recallData = mongoose.model("recalls", dataSchema);

我还制作了一个种子文件来获取数据。

代码语言:javascript
复制
const Recall = require("./models/Recall");

 module.exports = function getData(req, res) {
  const urls = [url1, url2, url3];

  urls.map(url => {
    fetch(url)
      .then(res => res.json())
      .then(data =>
        data.results.map(recalls => {
          let recs = new Recall(recalls);
          recs.save;
        })
      );
  });
}

我的问题是如何让fetch运行并填充数据库?有没有一个命令或mongoose函数可以做到这一点?我知道我基本上是想用一个种子文件来模拟Rails。也许这不是在Node中实现的方法。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2018-07-26 00:39:08

事实证明这很简单。我所需要的就是睡个好觉。我需要连接到mongoose,在save()之后,断开连接。

现在代码看起来像这样。我仍然需要在其中添加和编辑一些东西。任何聪明的重构建议都是值得感谢的。

代码语言:javascript
复制
const mongoose = require("mongoose");
const Recall = require("./models/Recall");
const db = require("./config/keys").mongoURI;
const fetch = require("node-fetch");
const URLS = require("./config/seedURLs");

let resultData;
let saveCounter = 0;

mongoose
  .connect(db)
  .then(() => console.log("mongodb connection success"))
  .catch(error => console.log(error));

URLS.map(async url => {
  try {
    const response = await fetch(url);
    const json = await response.json();
    resultData = [...json.results];

    for (let i = 0; i < resultData.length; i++) {
      let temp = new Recall({
        key1: resultData[i].key1,
        key2: resultData[i].key2,
        .
        .
        .
      });

      temp.save(() => {
        saveCounter++;
        if (saveCounter === resultData.length) {
          mongoose
            .disconnect()
            .then(() => console.log("mongodb disconnected"))
            .catch(error => console.log(error));
        }
      });
    }
  } catch (error) {
    console.log(error);
  }
});

运行节点seed.js命令。这是一般的想法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51510832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档