如何在module.exports中包含动态生成的数据

时间:2017-02-24 22:43:05

标签: node.js mongodb requirejs

使用module.exports导出以javascript文件编写的任何内容。如果从mongodb获取数据并且尚未写入静态文件,如何导出数据。  我已经看到只有静态数据被导出到其他模块而不是动态生成。

1 个答案:

答案 0 :(得分:1)

您可以导出promise或返回承诺的函数:

// dynamicData.js
const dataPromise = new Promise((resolve, reject) => {
  // load some data from mongo
  db.fetchSomeData((error, result) => {
    if(error) {
      reject(error);
    } else {
      resolve(result);
    }
  });
});

function getData() {
  return dataPromise;
}

module.exports = getData;

但是,您必须异步使用数据:

// someModule.js
const dynamicData = require("./dynamicData");

dynamicData().then((data) => {
  // use your async data
});

或者,您可以在运行任何其他应用程序代码之前加载数据,缓存它并访问缓存的值:

let data = null;

function load() {
  new Promise((resolve, reject) => {
    // load some data from mongo
    db.fetchSomeData((error, result) => {
      if(error) {
        reject(error);
      } else {
        data = result;
        resolve(result);
      }
    });
  });
}

function getData() {
  return data;
}

module.exports = {load, getData};

启动时加载:

const dynamicData = require("./dynamicData");

dynamicData.load()
  .then(() => {
    // start application
    const data = dynamicData.getData();
  });

另一个选项可能是同步使用mongo数据库的mongo-sync模块。